【问题标题】:Is it possible to get MSBuild property by string name?是否可以通过字符串名称获取 MSBuild 属性?
【发布时间】:2021-08-02 06:29:11
【问题描述】:

我正在尝试使用存储在另一个属性中的字符串值 "Something" 来检索 MSBuild 属性 ($(Something))。我尝试使用 MSBuild 的 Escape/Unescape 方法,但它仍然只打印 $(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:\TestProject\TestProject.vcxproj" on node 1 (OutputBuildMacro target(s)).
OutputBuildMacro:
  $(MSBuildProjectFile)
Done Building Project "D:\TestProject\TestProject.vcxproj" (OutputBuildMacro target(s
)).

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

【问题讨论】:

    标签: c++ visual-studio msbuild visual-studio-2017


    【解决方案1】:

    你可以试一试:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 2011-09-30
      相关资源
      最近更新 更多