在MSBuild中获取“参考程序集”路径

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或任何可能安装的不寻常位置上运行?

2个回答

5

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

<GetReferenceAssemblyPaths BypassFrameworkInstallChecks="False" TargetFrameworkMoniker=".NETFramework,Version=v4.0">
    <Output TaskParameter="FullFrameworkReferenceAssemblyPaths" PropertyName="path" />
</GetReferenceAssemblyPaths>

谢谢!我发现的一个问题是,ItemName="path" 意味着我需要使用 @(path) 语法来引用该值,或者将 ItemName 更改为 PropertyName 以使用 $(path)。另一个问题是路径包含尾部路径分隔符 \,导致执行命令时出现问题,因此我必须使用 $(path).(尾部'.')来使命令使用正确的路径。 - David Tchepak
我很高兴你能够解决ItemName的问题并使用PropertyName="path"。在你的情况下,这样做更有意义,因为你只有一个值。我会更新解决方案,以便其他人使用时更容易。谢谢! - SoftwareCarpenter

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接