我正在更新一个与.NET 4.5兼容的版本,我需要做的更改之一是更新我调用ilmerge的方式。
从上面的链接来看,这基本上意味着更改:
/targetplatform:"v4,C:windowsMicrosoft.NETFrameworkv4.0.30319"
自:
/targetplatform:"v4,C:Program FilesReference AssembliesMicrosoftFramework.NETFrameworkv4.0"
在我的 MSBuild AfterBuild 目标中,我使用 $(MSBuildToolsPath)
生成前者,如下所示:
/targetplatform:v4,$(MSBuildToolsPath)
将其转换为所需的/targetplatform:"v4,C:Program FilesReference AssembliesMicrosoftFramework.NETFrameworkv4.0"
路径的最佳方法是什么,以便它可以在 x64、x86 或任何可以最终安装的不寻常位置上运行?
在目标中添加 GetReferenceAssemblyPath 任务。让它将输出保存到项名称或属性,并将 $(msbuildtoolsPath) 替换为此新属性。您还可以添加条件检查,以确定需要传递给 ILMerge 的内容。
<GetReferenceAssemblyPaths BypassFrameworkInstallChecks="False" TargetFrameworkMoniker=".NETFramework,Version=v4.0">
<Output TaskParameter="FullFrameworkReferenceAssemblyPaths" PropertyName="path" />
</GetReferenceAssemblyPaths>
如果您可以找到包含所需信息(或所需信息的重要元素)的注册表项,那么我将使用$(Registry:<key name>[@<value name>])
语法来获取它。
http://blogs.msdn.com/b/msbuild/archive/2007/05/04/new-registry-syntax-in-msbuild-v3-5.aspx