Как цель MSBuild CoreCompile идентифицирует эталонные сборки

Может ли кто-нибудь пролить свет на то, как задача CoreCompile в TFS2010 (RC) Microsoft.TeamFoundation.Build создает ссылки на сборки, которые передаются в csc.exe?

Мы видим ссылки как на версии 2.0, так и на версии 4.0 System.Xml.dll (выделены жирным шрифтом ниже), однако мы используем флаг «Конкретная версия: true» в ссылке на сборку проекта и есть нет ссылок на сборку 4.0 в файле btproj:

C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /platform:x86 /errorreport:prompt /warn:4 /define:TRACE 
/reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Configuration.dll 
/reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll 
**/reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll** 
/reference:C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.dll 
**/reference:C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Xml.dll** 
/reference:C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Data.dll 
/reference:C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Web.Services.dll 

Обновление: я проверил выходные данные цели ResolveAssemblyReferences (из Microsoft.Common.targets) и вижу, что только сборки, на которые есть ссылки в проект (то есть сборки платформы 2.0) включены в список элементов '_ResolveAssemblyReferenceResolvedFiles':

ResolveAssemblyReferenceResolvedFiles:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Configuration.dll;
C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll;
C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll

Однако цель CoreCompile по-прежнему включает сборки 4.0, как описано выше.

Обновление 2. Хорошо, я обнаружил непонятную ошибку в цели AddBizTalkHiddenReferences в сценариях сборки BizTalk. Эта конкретная цель пытается добавить дополнительные сборки, в том числе дублированные выше.

Однако он использует GetCORSystemDirectory из 'mscoree.dll', который возвращает каталог установки общеязыковой среды выполнения (CLR), загруженной в процесс, в данном случае фреймворка 4.0, загруженного в MSBuild; в результате помощник не думает, что у него есть ссылка на сборку System.Xml, и добавляет ее, следовательно, дубликат.


person Nick Heppleston    schedule 11.05.2010    source источник
comment
Что произойдет, если вы не установите для конкретной версии значение true для System.Xml.dll?   -  person Julien Hoarau    schedule 11.05.2010
comment
Похоже это не имеет никакого значения.   -  person Nick Heppleston    schedule 12.05.2010
comment
Что-то, чего я не понимаю: вы ссылаетесь на System.Data.dll v4 и System.Web.Services.dll v4?   -  person Julien Hoarau    schedule 12.05.2010
comment
madgnome: Нет, не знаю; на самом деле, я обнаружил неясную ошибку в цели BizTalk «AddBizTalkHiddenReferences». Смотрите мое обновление выше. Большое спасибо за вашу помощь.   -  person Nick Heppleston    schedule 12.05.2010
comment
Отличная работа! Это подлый   -  person Julien Hoarau    schedule 12.05.2010


Ответы (1)


Эталонные сборки разрешаются ResolveAssemblyReferences целью в файле Windows\Microsoft.NET\Framework\$(Version)\Microsoft.Common.targets на основе Reference элементов, определенных в вашем файле проекта.

person Julien Hoarau    schedule 11.05.2010