MSBuild CoreCompile目标如何识别参考程序集

时间:2010-05-11 12:38:12

标签: msbuild tfs2010 biztalk biztalk-2009 csc

任何人都可以了解TFS2010(RC)Microsoft.TeamFoundation.Build目标中的CoreCompile任务如何生成传递给csc.exe的程序集引用?

我们看到对System.Xml.dll的版本2.0和4.0的引用(下面以粗体显示),但我们在项目程序集引用和 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 :好的,我已将此跟踪到BizTalk构建脚本中 AddBizTalkHiddenReferences 目标中的一个模糊错误。此特定目标尝试添加其他程序集,包括上面重复的程序集。

然而,它使用来自'mscoree.dll'的GetCORSystemDirectory,它返回加载到进程中的公共语言运行库(CLR)的安装目录,在这种情况下加载到4.0框架MSBuild的;因此,帮助程序认为它没有引用System.Xml程序集并添加它,因此重复。

1 个答案:

答案 0 :(得分:3)

参考程序集由文件ResolveAssemblyReferences中的Windows\Microsoft.NET\Framework\$(Version)\Microsoft.Common.targets目标根据项目文件中定义的Reference项解析。