2017-06-20 51 views
0

我發現這樣here.怎樣的ItemGroup轉換成的PropertyGroup在MSBUILD

了類似的問題,但這並不解決我的問題。我有這樣

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

一個的ItemGroup我需要按此格式

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

我使用沙塔文檔構建生成文件變成這樣的PropertyGroup。這需要我以PropertyGroup格式顯示的文檔源。但是在我的構建腳本中,我已經有了一個ItemGroup,它具有上述格式中提到的所有項目。

如何在此處使用該ItemGroup作爲SandCastle的文檔來源或如何將ItemGroup轉換爲以上格式的PropertyGroup?

其實我可以改變的ItemGroup到的PropertyGroup格式,但已經有一些邏輯動態形成這樣

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

[這是一個粗略的輪廓我給了這裏。這個操作不是實際使用的]

我是這個MSBUILD腳本的新手。任何人都可以對此有所瞭解嗎?

謝謝。

回答

1

您可以使用@()語法將項目轉換爲由換行符分隔的字符串。下面是一個例子項目文件(的MSBuild 15 .NET的核心測試):

<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" /> 

這甚至允許您使用通配符爲您的項目元素:

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

非常感謝你的男人。這是我正在尋找的。 – shanmugharaj

相關問題