Как MSBuild CoreCompile Target идентифицирует эталонные сборки - PullRequest
2 голосов
/ 11 мая 2010

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

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

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, и добавляет его, следовательно, дубликат.

1 Ответ

3 голосов
/ 11 мая 2010

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

...