我发现了类似的问题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脚本的新手。任何人都可以对此有所了解吗?
感谢。
答案 0 :(得分:1)
您可以使用@()
语法将项目转换为字符串,以换行符分隔。这是一个示例项目文件(在.net核心上使用MSBuild 15测试):
<Project>
<ItemGroup>
<DocumentationSource Include="TestLibrary\TestLibrary.csproj;TestLibrary2\TestLibrary2.csproj;TestLibrary2\TestLibrary3.csproj" />
</ItemGroup>
<PropertyGroup>
<DocumentationSources>
@(DocumentationSource->'<DocumentationSource sourceFile="%(Identity)" />', '
')
</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" />