4

我正在更新一个与 .NET 4.5 兼容的版本,我需要做的更改之一是更新我调用 ilmerge的方式。

从上面的链接,这基本上意味着改变:

/targetplatform:"v4,C:\windows\Microsoft.NET\Framework\v4.0.30319"

到:

/targetplatform:"v4,C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"

在我的 MSBuild AfterBuild 目标中,我使用 生成前者$(MSBuildToolsPath),如下所示:

/targetplatform:v4,$(MSBuildToolsPath)

将其转换为所需/targetplatform:"v4,C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"路径的最佳方法是什么,以便它可以在 x64、x86 或任何可以安装的异常位置上运行?

4

2 回答 2

5

在您的目标中添加 GetReferenceAssemblyPaths 任务。让它将输出保存到项目名称或属性,并用这个新属性替换 $(msbuildtoolsPath)。您还可以添加条件检查以确定需要传递给 ILMerge 的内容。

<GetReferenceAssemblyPaths BypassFrameworkInstallChecks="False" TargetFrameworkMoniker=".NETFramework,Version=v4.0">
    <Output TaskParameter="FullFrameworkReferenceAssemblyPaths" PropertyName="path" />
</GetReferenceAssemblyPaths>
于 2012-06-30T20:18:29.870 回答
0

如果您可以找到包含信息(或您需要的信息的重要元素)的注册表项,那么我会使用$(Registry:<key name>[@<value name>])语法来获取它。

http://blogs.msdn.com/b/msbuild/archive/2007/05/04/new-registry-syntax-in-msbuild-v3-5.aspx

于 2012-06-29T20:52:50.760 回答