我在MSBuild中完全是新手,我对所谓的metadata MSBuild感到困惑。
据我了解,文档中的元数据等于“变量”。但是有没有办法通过MSBuild在程序集中真正嵌入自定义元数据?
<ItemGroup>
<Compile Include="one.cs" />
<Compile Include="two.cs">
<BuildDay>Tuesday</BuildDay>
</Compile>
</ItemGroup>
答案 0 :(得分:2)
元数据在构建过程中用于各种任务。它不一定是编译器的输入或嵌入到程序集中,但主要由MSBuild和编译器(Roslyn)生态系统提供的目标和任务使用。
使用自定义目标扩展构建时,自定义元数据非常有用。
如果要将某些内容嵌入到程序集中,则需要在构建期间生成代码并在构建期间添加项目。这需要通过编写msbuild目标手动完成。
使用元数据生成代码的示例适用于新的&#34; SDK风格的&#34;项目(.NET Core,.NET Standard和ASP.NET Core应用程序的默认设置),其中在构建期间生成通常位于AssemblyInfo.cs
文件中的程序集属性。有一个名为WriteCodeFragment
(code)的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")]