2017-10-14 91 views
0

我完全是MSBuild的新增功能,我對MSBuild的所謂metadata有點混淆。在項目中添加元數據

據我所知,文檔中的元數據等於「變量」。但是有沒有辦法通過MSBuild將自定義元數據嵌入到程序集中?

<ItemGroup> 
    <Compile Include="one.cs" /> 
    <Compile Include="two.cs"> 
     <BuildDay>Tuesday</BuildDay> 
    </Compile> 
</ItemGroup> 

回答

2

元數據在構建過程中用於各種任務。它不一定是編譯器的輸入或嵌入到程序集中,但主要由MSBuild和編譯器(Roslyn)生態系統提供的目標和任務使用。

使用自定義目標擴展構建時,自定義元數據可能很有用。

當您想要將某些東西嵌入到程序集中時,您需要在構建過程中生成代碼並在構建過程中添加項目。這需要通過編寫msbuild目標手動完成。

元數據用於生成代碼的示例適用於新的「SDK風格」項目(默認用於.NET Core,.NET Standard和ASP.NET Core應用程序),其中程序集屬性通常爲AssemblyInfo.cs文件在構建過程中生成。有一個名爲WriteCodeFragmentcode)的msbuild任務,可以讀取項目並根據它們生成裝配屬性,這是wired up by msbuld targets

以此來增加額外的屬性就可以在主項目文件中加入一個項目來實現這一目標和任務的理解:

<ItemGroup> 
    <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo"> 
    <_Parameter1>My.Test.Project</_Parameter1> 
    </AssemblyAttribute> 
</ItemGroup> 

,然後做同樣的事情,如果我有手動添加的AssemblyInfo.cs文件並編寫下面的代碼:

[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("My.Test.Project")] 
+0

martin,這種方法可以覆蓋已經在AssemblyInfo.cs中的值嗎? –

+0

不,這會導致編譯器錯誤,因爲您無法在程序集上定義兩次相同的屬性。 –