msbuild - 如何从 MSBuild 中的 ItemGroup 构建 PropertyGroup 条目?

标签 msbuild

我对 MSBuild 非常陌生,无法弄清楚如何从条件部分构造 PropertyGroup 条目。

这是我所拥有的,但不起作用:

<ItemGroup>
    <CompilerDirective Include="DEBUG_PARANOID" Condition=" '$(SomeFlag)' == 'true' "/>
    <CompilerDirective Include="DEBUG"/>
    <CompilerDirective Include="TRACE"/>
</ItemGroup>

<PropertyGroup>
    ...
    <DefineConstants>@(CompilerDirective)</DefineConstants>
    ...
</PropertyGroup>

如果 SomeFlag 设置为 true,我希望定义的常量显示为 DEBUG_PARANOID;DEBUG;TRACE,如果不是,则省略 DEBUG_PARANOID。顺便说一句,这是针对 .csproj 的。

如果我用消息任务打印出@(CompilerDirective),它就可以工作。

我的问题是如何在 PropertyGroup 条目中实现此功能?

最佳答案

上面的内容有效。我运行了这个:

<Target Name="Test">
  <ItemGroup>
      <CompilerDirective Include="DEBUG_PARANOID"
        Condition=" '$(SomeFlag)' == 'true' "/>
      <CompilerDirective Include="DEBUG"/>
      <CompilerDirective Include="TRACE"/>
  </ItemGroup>
  <PropertyGroup>
    <DefineConstants>@(CompilerDirective)</DefineConstants>
  </PropertyGroup>
  <Message Text="$(DefineConstants)" />
</Target>

并得到正确的输出 调试;跟踪 或者 调试_偏执;调试;跟踪 取决于属性(property)的值(value)。这在什么情况下对您不起作用?

关于msbuild - 如何从 MSBuild 中的 ItemGroup 构建 PropertyGroup 条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5345865/

相关文章:

tfs - SonarScanner 给出 'MsBuild.exe' 在 TFS 2018 上不被识别为内部或外部命令

MSBuild - 创建带有通配符的属性?

c# - 如何确保只有 *.exe 或 *.dll 文件进入输出文件夹,而任何其他构建文件进入中间文件夹 VS2012?

file - 删除 6 个月前的文件

c++ - 如何设置.vcxproj以让MSBuild编译dll

c# - 在 Jenkins 中构建后,msbuild.exe 不是可识别的命令

msbuild - 通过 Web 部署来部署 SSDT

properties - 如何通过空格传递路径并将尾部反斜杠作为属性传递给MSBuild

c++ - 使用 MSBuild 将/MP 选项传递给编译器

msbuild - MSBuild CoreCompile 目标如何识别引用程序集