msbuild - 使用 MSBuild,如何通过迭代 ItemGroup 中的文件来构造动态字符串?

标签 msbuild msbuild-task

我需要创建多个/testcontainer: 参数以提供给 exec 的 MsTest 的任务。

我有以下几点:

  <ItemGroup>
    <TestFiles Include="$(ProjectPath)\**\UnitTest.*.dll" />
  </ItemGroup>

对于 TestFiles 中的每个匹配项,我想构建一个像这样的字符串:
"/testcontainer:UnitTest.SomeLibrary1.dll"
"/testcontainer:UnitTest.SomeLibrary2.dll"
"/testcontainer:UnitTest.SomeLibrary3.dll"

我正在尝试使用 MSBuild 的内部结构而不必创建自定义任务,这可能吗?

TIA

最佳答案

这实际上取决于此后的用法。例如,您将其发送到的任务,它是否在项目列表中接受并且您想调用它一次还是多次?

如果您想调用一次,则使用 @(...) 语法,如果您想多次调用它,则使用 %(...) 语法进行批处理。

调用一次

<Message Text="Test Files: @(TestFiles->'/testcontainer:%(RecursiveDir)%(Filename)%(Extension)')"/>

多次调用
<Message Text="Test Files: /testcontainer:%(TestFiles.RecursiveDir)%(TestFiles.Filename)%(TestFiles.Extension)"/>

有关批处理的更多信息,请访问 http://sedotech.com/Resources#batching

关于msbuild - 使用 MSBuild,如何通过迭代 ItemGroup 中的文件来构造动态字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2768595/

相关文章:

msbuild - 如何在未安装 VSTS DB 的情况下构建 .dbproj?

git - Cruise Control .Net 异常写入 msbuild-results.xml

c# - Roslyn:如何在 Visual Studio 之外加载现有项目

msbuild - MSB4086 : A numeric comparison was attempted

.net - 在 C# 项目中覆盖 BuildDependsOn 时遇到问题

msbuild - 忽略 Azure Pipelines 中 .vdproj 项目的 NuGet 包还原

c# - 具有持续集成的多语言应用程序工具包

c# - 在 msbuild 中使用复制任务和解压缩任务

MSBuild 目标和 Visual Studio 2012 问题

msbuild - Cake Build 抑制 MSBuild 警告