将元数据添加到项目中

时间:2017-10-14 06:21:05

标签: c# msbuild

我在MSBuild中完全是新手,我对所谓的metadata MSBuild感到困惑。

据我了解,文档中的元数据等于“变量”。但是有没有办法通过MSBuild在程序集中真正嵌入自定义元数据?

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

1 个答案:

答案 0 :(得分:2)

元数据在构建过程中用于各种任务。它不一定是编译器的输入或嵌入到程序集中,但主要由MSBuild和编译器(Roslyn)生态系统提供的目标和任务使用。

使用自定义目标扩展构建时,自定义元数据非常有用。

如果要将某些内容嵌入到程序集中,则需要在构建期间生成代码并在构建期间添加项目。这需要通过编写msbuild目标手动完成。

使用元数据生成代码的示例适用于新的&#34; SDK风格的&#34;项目(.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")]