2

谁能阐明 TFS2010 (RC) Microsoft.TeamFoundation.Build 目标中的 CoreCompile 任务如何生成传递给 csc.exe 的程序集引用?

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

但是,它使用“mscoree.dll”中的 GetCORSystemDirectory,它返回加载到进程中的公共语言运行时 (CLR) 的安装目录,在本例中是加载到 MSBuild 中的 4.0 框架;结果,助手认为它没有引用 System.Xml 程序集并添加它,因此是重复的。

4

1 回答 1

4

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

于 2010-05-11T13:05:46.863 回答