在项目文件中设置程序集属性
可以使用 MSBuild 属性将包相关的项目属性转换为生成的代码文件中的程序集属性。 此外,可以使用 MSBuild 项将任意程序集属性添加到生成的文件中。
将包属性用作程序集属性
GenerateAssemblyInfo
MSBuild 属性控制项目的 AssemblyInfo
属性生成。 当 GenerateAssemblyInfo
值为 true
(默认值)时,与包相关的项目属性将转换为程序集属性。 下表列出了用于生成特性的项目属性。 还列出了可用于基于每个特性禁用该生成的属性,例如:
<PropertyGroup>
<GenerateNeutralResourcesLanguageAttribute>false</GenerateNeutralResourcesLanguageAttribute>
</PropertyGroup>
MSBuild 属性 | 程序集属性 | 要禁用特性生成的属性 |
---|---|---|
Company |
AssemblyCompanyAttribute | GenerateAssemblyCompanyAttribute |
Configuration |
AssemblyConfigurationAttribute | GenerateAssemblyConfigurationAttribute |
Copyright |
AssemblyCopyrightAttribute | GenerateAssemblyCopyrightAttribute |
Description |
AssemblyDescriptionAttribute | GenerateAssemblyDescriptionAttribute |
FileVersion |
AssemblyFileVersionAttribute | GenerateAssemblyFileVersionAttribute |
InformationalVersion |
AssemblyInformationalVersionAttribute | GenerateAssemblyInformationalVersionAttribute |
Product |
AssemblyProductAttribute | GenerateAssemblyProductAttribute |
AssemblyTitle |
AssemblyTitleAttribute | GenerateAssemblyTitleAttribute |
AssemblyVersion |
AssemblyVersionAttribute | GenerateAssemblyVersionAttribute |
NeutralLanguage |
NeutralResourcesLanguageAttribute | GenerateNeutralResourcesLanguageAttribute |
有关这些设置的说明:
AssemblyVersion
和FileVersion
默认采用$(Version)
的值而不带后缀。 例如,如果$(Version)
为1.2.3-beta.4
,则值将为1.2.3
。InformationalVersion
默认是$(Version)
的值。- 如果存在
$(SourceRevisionId)
属性,则该属性会附加到InformationalVersion
。 可以使用IncludeSourceRevisionInInformationalVersion
禁用此行为。 Copyright
和Description
属性也可用于 NuGet 元数据。Configuration
(默认值为Debug
)由所有 MSBuild 目标共享。 可以通过dotnet
命令的--configuration
选项对其进行设置,例如 dotnet pack。- 创建 NuGet 包时会使用某些属性。 有关详细信息,请参阅包属性。
设置任意属性
也可以将自己的程序集属性添加到生成的文件中。 为此,请定义 <AssemblyAttribute>
MSBuild 项,告知 SDK 要创建的属性类型。 这些项还应包括该属性所需的任何构造函数参数。 例如,该 System.Reflection.AssemblyMetadataAttribute 属性有一个采用两个字符串的构造函数:
- 描述任意值的名称。
- 要存储的值。
如果 MSBuild 中有 Date
属性,其中包含程序集创建日期,则可以使用以下 MSBuild 代码通过 AssemblyMetadataAttribute
将该日期嵌入程序集属性:
<ItemGroup>
<!-- Include must be the fully qualified .NET type name of the Attribute to create. -->
<AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
<!-- _Parameter1, _Parameter2, etc. correspond to the
matching parameter of a constructor of that .NET attribute type -->
<_Parameter1>BuildDate</_Parameter1>
<_Parameter2>$(Date)</_Parameter2>
</AssemblyAttribute>
</ItemGroup>
此项会告知 .NET SDK 将以下 C#(或等效 F# 或 Visual Basic)代码作为程序集级属性发出:
[assembly: System.Reflection.AssemblyMetadataAttribute("BuildDate", "01/19/2024")]
(实际日期字符串是你在生成时提供的任何字符串。)
如果特性具有除 System.String
以外的参数类型,则可使用 MSBuild WriteCodeFragment
任务支持的特定 XML 元素模式来指定参数。 请参阅 WriteCodeFragment 任务 - 生成程序集级特性。
从 .NET Framework 迁移
如果将 .NET Framework 项目迁移到 .NET 6 或更高版本,则可能会遇到与程序集信息文件重复相关的错误。 这是因为 .NET Framework 项目模板会创建一个包含程序集信息属性集的代码文件。 该文件通常位于 .\Properties\AssemblyInfo.cs 或 .\Properties\AssemblyInfo.vb 。 但是,SDK 样式项目还会基于项目设置为你生成此文件。
将代码移植到 .NET 6 或更高版本时,请执行以下操作之一:
- 通过在项目文件中将
GenerateAssemblyInfo
设置为false
来禁用包含程序集信息特性的临时代码文件的生成。 这使你可以保留 AssemblyInfo 文件。 - 将 AssemblyInfo 文件中的设置迁移到项目文件,然后删除 AssemblyInfo 文件。