如何使用MSBuild创建XML文件?

Emi*_*dee 19 xml msbuild

我想在MSBuild任务中创建一个XML文件.

我有一个文件列表:

<CreateItem Include="$(TestsAssembliesOutputDir)\Emidee.*.Tests.dll">
  <Output ItemName="TestsAssemblies" TaskParameter="Include" />
</CreateItem>
Run Code Online (Sandbox Code Playgroud)

我想创建一个看起来像这样的XML:

<?xml version="1.0" encoding="utf-8"?>
<xunit>
  <assemblies>
    <assembly filename="PATH OF FILE #1" shadow-copy="true" />
    <assembly filename="PATH OF FILE #2" shadow-copy="true" />
  </assemblies>
</xunit>
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

提前致谢

麦克风

Bri*_*ler 30

又快又脏......

<Target Name="CreateXml">
  <ItemGroup>
    <TestAssembly Include="$(TestsAssembliesOutputDir)\Emidee.*.Tests.dll" />
    <Line Include="line01"><Text>&lt;xunit&gt;</Text></Line>
    <Line Include="line02"><Text>&lt;assemblies&gt;</Text></Line>
    <Line Include="line03"><Text>&lt;assembly filename=&quot;%(TestAssembly.Identity)&quot; shadow-copy=&quot;true&quot; /&gt;</Text></Line>
    <Line Include="line04"><Text>&lt;/assemblies&gt;</Text></Line>
    <Line Include="line05"><Text>&lt;/xunit&gt;</Text></Line>
    <LineText Include="%(Line.Text)" />
  </ItemGroup>
  <WriteLinesToFile
     File="out.xml"
     Lines="@(LineText)"
     Overwrite="true"
     />
</Target>
Run Code Online (Sandbox Code Playgroud)

留给你作为锻炼

  • 最初的<?xml行
  • 缩进(提示在<`Text>中使用CDATA)

您还可以在WriteLinesToFile中使用以下内容并省略合成的@(LineText)

    Lines="@(Line->'%(Text)')"
Run Code Online (Sandbox Code Playgroud)