在 MSBuild 中创建字符串的 ItemGroup

发布于 2024-09-14 14:15:03 字数 538 浏览 6 评论 0原文

我想创建任意字符串/名称的“ItemGroup”,以便使用 MSBuild 转换,例如:

<ItemGroup>
    <Categories>First</Categories>
    <Categories>Second</Categories>
</ItemGroup>

然后我希望将这些类别的转换传递到控制台应用程序中,例如:

/c @(Categories, ' /c ')

我在引号中说“ItemGroup”的原因,是因为我不确定以这种方式使用 ItemGroup 是否适合我 - 据我在文档中看不到任何内容表明 ItemGroups 必须 是文件,但是使用由于缺少强制性的“包含”属性,上述结果会导致错误消息。

  • 有没有办法使用 ItemGroups 执行上述操作?
  • 或者,是否有更好的方法在不使用 ItemGroups 的情况下实现上述目标?

I want to create an "ItemGroup" of arbitrary strings / names in order to use MSBuild transforms, for example:

<ItemGroup>
    <Categories>First</Categories>
    <Categories>Second</Categories>
</ItemGroup>

I then wish to pass a transform of these categories into a console app, e.g.:

/c @(Categories, ' /c ')

The reason why I say "ItemGroup" in quotes, is because I'm not sure whether or not it is applicable for me to use ItemGroups in this way - as far as I can see nothing in the documentation states that ItemGroups must be files, however using the above results in an error message due to missing mandatory "Include" attribute.

  • Is there a way of doing the above using ItemGroups?
  • Alternatively is there a better way of achieving the above without using ItemGroups?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绅士风度i 2024-09-21 14:15:03

您可以在 Item 中使用任意字符串以及文件,但必须使用以下语法:

<ItemGroup>
  <Categories Include="First"/>
  <Categories Include="Second"/>
</ItemGroup>

Item 与任意字符串一起使用时的唯一区别是某些元数据将毫无意义。 (例如%(Categories.FullPath)

然后您可以使用您的 Item 执行如下命令:

<Target Name="ExecCommand">
  <Exec Command="YourProgram.exe /c @(Categories, ' /c ')"/>

  <!-- Using transformation -->
  <Exec Command="YourProgram.exe @(Categories -> '/c %(Identity)')"/>
</Target>

You can use arbitrary string as well as files in Item, but you must use this syntax :

<ItemGroup>
  <Categories Include="First"/>
  <Categories Include="Second"/>
</ItemGroup>

The only difference when you use Item with arbitrary string is that some metadata will be meaningless. (%(Categories.FullPath) for example)

You can then use your Item to execute a command like this :

<Target Name="ExecCommand">
  <Exec Command="YourProgram.exe /c @(Categories, ' /c ')"/>

  <!-- Using transformation -->
  <Exec Command="YourProgram.exe @(Categories -> '/c %(Identity)')"/>
</Target>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文