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
相关产品推荐
相关产品推荐

