代码之家  ›  专栏  ›  技术社区  ›  Nick Heppleston

msbuild corecompile目标如何标识引用程序集

  •  2
  • Nick Heppleston  · 技术社区  · 14 年前

    任何人都能解释一下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 
    

    更新 :我已经检查了 解决assemblyreferences 目标(来自 microsoft.common.targets目标 )并且可以看到只有项目中引用的程序集(即2.0框架程序集)包含在项列表中 ''u 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 :好的,我已经追踪到了 添加BiztalkHidden引用 目标位于Biztalk生成脚本中。这个特定的目标试图添加额外的程序集,包括上面复制的程序集。

    然而 ,它使用“mscoree.dll”中的getcorsystemdirectory,该目录返回加载到进程中的公共语言运行时(clr)的安装目录,在本例中,加载到msbuild中的4.0框架;因此,帮助程序认为它没有引用System.xml程序集并添加它,因此是重复的。

    1 回复  |  直到 9 年前
        1
  •  3
  •   Julien Hoarau    14 年前

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

    推荐文章