是否可以通过字符串名称获取MSBuild属性



我正试图通过使用存储在另一个属性中的字符串值"Something"来检索MSBuild属性($(Something)(。我尝试使用MSBuild的Escape/Uescape方法,但它仍然只打印$(Something),而不是我想要的属性:

<Target Name="OutputBuildMacro">
<PropertyGroup>
<PropertyToGet>MSBuildProjectFile</PropertyToGet>
<MacroName>$([MSBuild]::Escape('$'))($(PropertyToGet))</MacroName>
</PropertyGroup>
<Message Text="$([MSBuild]::Unescape('$(MacroName)'))" />
</Target>

运行msbuild TestProject.vcxproj -t:OutputBuildMacro时的输出

Project "D:TestProjectTestProject.vcxproj" on node 1 (OutputBuildMacro target(s)).
OutputBuildMacro:
$(MSBuildProjectFile)
Done Building Project "D:TestProjectTestProject.vcxproj" (OutputBuildMacro target(s
)).

我还试图用另一对$()来包装未标注的值,但这只是给了我一个错误。是否可以使用字符串值而不是用XML编写的文字名称来检索msbuild属性?

您可以尝试一下:

<Target Name="OutputBuildMacro">
<PropertyGroup>
<PropertyToGet>MSBuildProjectFile</PropertyToGet>
<MacroName>$(PropertyToGet)</MacroName>
</PropertyGroup>
<Message Text="$(MacroName)" />
</Target>

>是否可以使用字符串值而不是用XML编写的文字名称来检索msbuild属性

据我所知,这是不可能的。文字名称是唯一的,但字符串值不是。

最新更新