Может ли кто-нибудь пролить свет на то, как задача 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, и добавляет ее, следовательно, дубликат.