You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2019构建C#类库:AssemblyVersion含*异常及文件/产品版本差异化配置问询

如何在VS2019中配置C#类库的自动文件版本与固定产品版本?

先帮你理清最初操作里的问题,再给出针对性的解决方案:

一、你最初配置的问题所在

当你同时在AssemblyInfo.cs中设置:

[assembly: AssemblyVersion("8.0.*")]
[assembly: AssemblyFileVersion("8.0.0.0")]

并且关闭了确定性编译后,出现文件版本和产品版本都是8.0.0.0的原因是:

  • .NET框架中,产品版本(Product Version)默认会继承AssemblyFileVersion的值,如果你显式指定了AssemblyFileVersion,它就不会再使用AssemblyVersion的自动生成值来填充产品版本。
  • 同时,因为你固定了AssemblyFileVersion,所以文件版本自然就是你设置的固定值,不会触发自动生成逻辑。

二、实现你需求的正确配置方式

你的需求是:文件版本自动生成8.0.BUILD.REVISION格式,产品版本固定为8.0.0.0,这个配置完全可行,有两种常用方式:

方式1:通过AssemblyInfo.cs配置

保留自动版本的AssemblyVersion,同时用AssemblyInformationalVersion来固定产品版本:

// 保留自动生成BUILD和REVISION的配置
[assembly: AssemblyVersion("8.0.*")]
// 注释掉或删除AssemblyFileVersion,让编译器自动用AssemblyVersion的自动值填充文件版本
// [assembly: AssemblyFileVersion("8.0.0.0")]
// 显式设置产品版本(对应属性窗口的"产品版本")
[assembly: AssemblyInformationalVersion("8.0.0.0")]

这样设置后:

  • 文件版本会自动生成为8.0.BUILD.REVISION(因为没有指定AssemblyFileVersion,编译器会复用AssemblyVersion的自动生成值)
  • 产品版本会固定显示为你设置的8.0.0.0

方式2:通过.csproj文件配置(更推荐,现代项目风格)

如果你不想维护AssemblyInfo.cs,可以直接在项目的.csproj文件中配置,效果完全一致:

<PropertyGroup>
  <!-- 必须关闭确定性编译,否则自动版本生成会失败 -->
  <Deterministic>false</Deterministic>
  <!-- 开启AssemblyVersion的自动BUILD和REVISION生成 -->
  <AssemblyVersion>8.0.*</AssemblyVersion>
  <!-- 固定产品版本(对应InformationalVersion) -->
  <InformationalVersion>8.0.0.0</InformationalVersion>
  <!-- 不设置AssemblyFileVersion,让它自动继承AssemblyVersion的自动值 -->
</PropertyGroup>

配置完成后,重新加载项目并重建,就能看到符合预期的版本信息了。

关键注意事项

  • 一定要确保Deterministic设置为false:确定性编译要求每次编译输出完全一致,而自动版本是动态变化的,所以必须关闭这个选项才能让自动版本生效。
  • 如果是.NET Core/.NET 5+项目,默认可能已经移除了AssemblyInfo.cs,所有版本配置都通过.csproj完成;如果是.NET Framework项目,两种方式都可以选择,但建议逐步迁移到.csproj配置,更简洁易维护。

内容的提问来源于stack exchange,提问作者AlainD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 07:37:35