如何在MSBUILD

时间:2017-06-20 10:49:55

标签: msbuild sandcastle

我发现了类似的问题here.

但这并没有解决我的问题。我有像这样的ItemGroup

<ItemGroup>
    <DocumentationSource Include="TestLibrary\TestLibrary.csproj;TestLibrary2\TestLibrary2.csproj;TestLibrary2\TestLibrary3.csproj" />
</ItemGroup>

我需要以这种格式将其更改为属性组

<PropertyGroup>
    <DocumentationSources>
      <DocumentationSource sourceFile="TestLibrary\TestLibrary.csproj" />
      <DocumentationSource sourceFile="TestLibrary2\TestLibrary2.csproj" />
      <DocumentationSource sourceFile="TestLibrary2\TestLibrary3.csproj" />
    </DocumentationSources>
</PropertyGroup>

我正在使用sandcastle文档构建器来生成文档。这需要我以PropertyGroup格式显示的文档源。但是在我的构建脚本中,我已经有了一个ItemGroup,其中包含了上述格式中提到的所有项目。

如何在此处使用该ItemGroup作为SandCastle的文档源或如何以上述格式将ItemGroup转换为PropertyGroup?

实际上我可以将ItemGroup更改为PropertyGroup格式,但是已经用这样的逻辑动态形成了

 <_ProjectFilesPlatform Include="%(ProjectDefinitionsPlatform.Identity)">
        <_ProjectPath>$([System.String]::Copy(%(ProjectDefinitionsPlatform.Identity)).Replace(".","\"))</_ProjectPath>
      </_ProjectFilesPlatform>

[这是我在这里给出的粗略轮廓。这种操作不是实际使用的操作]

我是这个MSBUILD脚本的新手。任何人都可以对此有所了解吗?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用@()语法将项目转换为字符串,以换行符分隔。这是一个示例项目文件(在.net核心上使用MSBuild 15测试):

<Project>
  <ItemGroup>
    <DocumentationSource Include="TestLibrary\TestLibrary.csproj;TestLibrary2\TestLibrary2.csproj;TestLibrary2\TestLibrary3.csproj" />
  </ItemGroup>

  <PropertyGroup>
    <DocumentationSources>
      @(DocumentationSource->'&lt;DocumentationSource sourceFile="%(Identity)" /&gt;', '
      ')
    </DocumentationSources>
  </PropertyGroup>

  <Target Name="Build">
    <Message Importance="high" Text="Value of DocumentationSources: $(DocumentationSources)" />
  </Target>
</Project>

产生以下输出:

$ dotnet msbuild
Microsoft (R) Build Engine version 15.3.378.6360 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Value of DocumentationSources: 
        <DocumentationSource sourceFile="TestLibrary/TestLibrary.csproj" />
        <DocumentationSource sourceFile="TestLibrary2/TestLibrary2.csproj" />
        <DocumentationSource sourceFile="TestLibrary2/TestLibrary3.csproj" />

这甚至允许您为item元素使用通配符:

<DocumentationSource Include="**\*.csproj" />