如何为 .NET Core 项目指定程序集版本?

Nat*_*han 21 .net c# .net-core

我注意到在新的 .NET Core 项目中没有AssemblyInfo.cs创建文件。我已经看到您仍然可以设置诸如AssemblyVersion等等之类的程序集属性。

使用 AssemblyInfo.cs 文件还有什么正当理由吗?

pok*_*oke 25

您绝对可以AssemblyInfo.cs像过去一样创建文件并配置程序集。当然,由于属性是使用程序集属性设置的,因此您不需要使用AssemblyInfo但可以选择任何其他文件名,甚至是现有的文件名。

话虽如此,AssemblyInfo.cs默认模板中不再包含的原因是新的 SDK 样式的项目类型支持在csproj项目文件中设置此信息。

因此,设置程序集版本的常用方法是Version在项目文件中设置属性(或将其自动设置为构建过程的一部分)。例如:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <Version>1.2.3</Version>
  </PropertyGroup>

  …
</Project>
Run Code Online (Sandbox Code Playgroud)

由于这是一个 MSBuild 属性,您还可以在构建过程中设置它,例如使用dotnet build /p:Version=1.2.3.

还有属性VersionPrefixVersionSuffix可用于对来自环境的自动构建版本号(例如GIT中提交的ID,或版本号)。

除了版本相关的属性外,还有一些更多的 NuGet 属性可以在项目文件中设置,这使得AssemblyInfo.cs大部分都是多余的。


小智 21

根据迁移指南,目前我们很少有灵活的方法来设置程序集属性。

  1. 使用旧式的 AssemblyInfo.cs 文件(手动创建)。
using System;
using System.Reflection;

[assembly: System.Reflection.AssemblyCompanyAttribute("...")]
[assembly: System.Reflection.AssemblyCopyrightAttribute("...")]
[assembly: System.Reflection.AssemblyDescriptionAttribute("...")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("...")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("...")]
[assembly: System.Reflection.AssemblyProductAttribute("...")]
[assembly: System.Reflection.AssemblyTitleAttribute("...")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0-dev01234567")]
Run Code Online (Sandbox Code Playgroud)
  1. 使用 MSBuild 的属性在构建时生成程序集属性(可以是静态的your.csproj或通过命令行参数传递,例如 /property:Version=1.0.0-dev01234567)。
<Project Sdk="Microsoft.NET.Sdk.Web">
    <PropertyGroup>
        <Company>...</Company>
        <Copyright>...</Copyright>
        <Description>...</Description>
        <Product>...</Product>
        <AssemblyTitle>...</AssemblyTitle>
        <Version>1.0.0-dev01234567</Version>
    </PropertyGroup>

    ...
</Project>
Run Code Online (Sandbox Code Playgroud)

注意:您可以合并两个解决方案,但避免程序集属性重复。

  • 如果使用两种样式的设置属性时发生冲突,您可能需要添加“&lt;GenerateAssemblyInfo&gt;false&lt;/GenerateAssemblyInfo&gt;”。 (7认同)

dat*_*ung 17

我正在使用 Visual Studio 2022 和 .NET Core 6。

  1. 右键单击解决方案资源管理器中的项目
  2. 编辑项目文件

Version以下是包含,AssemblyVersion和的示例项目文件FileVersion

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <Version>1.0.0</Version>
    <AssemblyVersion>1.0.0.0</AssemblyVersion>
    <FileVersion>1.0.0.0</FileVersion>
  </PropertyGroup>
  ...
</Project>
Run Code Online (Sandbox Code Playgroud)


小智 11

  1. 从您的项目 -> 选择属性
  2. 在左侧面板上选择包/常规
  3. “程序集版本”“文件版本”字段中输入您的版本(例如:1.0.0.0)

在此输入图像描述

  • 这在 Visual Studio 2022 和 .Net 7 中令人困惑。“包”&gt;“常规”部分以一个复选框开始 - 在构建操作中生成 NuGet 包。这帮助我了解它们确实是带或不带 Nuget 的程序集版本和文件版本 (2认同)

Chr*_*oll 8

仍然使用 AssemblyInfo.cs 文件的原因可能包括

\n\n
    \n
  1. 您想要跨项目共享一些 AssemblyInfo,\n您可以使用文件来完成此操作
  2. \n
  3. 您可能有一个代码生成过程,可以输出程序集信息
  4. \n
  5. 项目文件格式尚不支持您可能想要使用的所有属性。项目 Sdk 知道如何从文件中具有匹配名称的 Xml 元素自动生成一组有限的元素,但它不支持为程序集自动生成任意或其他元数据。[AssembyAttributes]csproj[AssembyAttributes]
  6. \n
  7. AssemblyInfo.cs 是 \xe2\x80\x9c 只是\xe2\x80\x9d 一个源代码文件,您可能还有其他元数据 \xe2\x80\x93\xc2\xa0 无论是 AssemblyAttributes 还是类或其他您想要的 \xe2\x80\x93将所有内容放在一个容易找到的地方。
  8. \n
\n