2017-10-14 58 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

不,这会导致编译器错误,因为您无法在程序集上定义两次相同的属性。 –