dotnet 8 破坏性改动 在 AssemblyInformationalVersionAttribute 添加上 gi ...

打印 上一主题 下一主题

主题 1947|帖子 1947|积分 5841

我在一个 WPF 项目里面,在界面显示应用的版本号,更新到 dotnet 8 的 SDK 之后,发现我的界面布局破坏了。本质上这个破坏性改动和 WPF 没有什么关系,是 dotnet 的 SDK 或编译器的破坏性变更,在 AssemblyInformationalVersionAttribute 的 InformationalVersion 属性里面写入了当前的 git 的 commit 提交号
咱可以非常方便写出代码获取到当前应用的版本号信息,如下面代码,我新建了一个简单的 WPF 界面用来显示当前应用的版本号
  1.     <Grid>
  2.         <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
  3.             <Run Text="当前版本号:"/>
  4.             <Run x:Name="AppVersionRun"></Run>
  5.         </TextBlock>
  6.     </Grid>
复制代码
对应的后台 cs 代码如下
  1.     public MainWindow()
  2.     {
  3.         InitializeComponent();
  4.         var assemblyInformationalVersionAttribute = GetType().Assembly.GetCustomAttributes<System.Reflection.AssemblyInformationalVersionAttribute>().First();
  5.         AppVersionRun.Text = assemblyInformationalVersionAttribute.InformationalVersion;
  6.     }
复制代码
在使用 dotnet 8 的 SDK 构建时,无论使用的运行时是 dotnet 6 照旧 dotnet 7 等,都会在 InformationalVersion 里面拿到 版本号+commit 格式的字符串,如下图

此变更不仅修改了版本号字符串,还影响了 VisualStudio 的热重载
  1. obj\Debug\net7.0-windows\Xxx.AssemblyInfo.cs (第 17 行): 错误 ENC0003: 更新“属性”需要重启应用程序。
复制代码
如果不想要在 InformationalVersion 里面拿到的版本号信息包含 commit 信息,则可以在 csproj 里面配置 IncludeSourceRevisionInInformationalVersion 属性设置为 false 值,如下面代码
  1. <Project Sdk="Microsoft.NET.Sdk">
  2.   <PropertyGroup>
  3.     <OutputType>WinExe</OutputType>
  4.     <TargetFramework>net7.0-windows</TargetFramework>
  5.     <Nullable>enable</Nullable>
  6.     <ImplicitUsings>enable</ImplicitUsings>
  7.     <UseWPF>true</UseWPF>
  8.     <IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
  9.   </PropertyGroup>
  10. </Project>
复制代码
修改之后的重新构建应用运行,可以看到此时界面只显示版本号

如果想要自界说版本号后面添加的信息,可以通过配置 SourceRevisionId 属性。在没有设置 IncludeSourceRevisionInInformationalVersion 为 false 的前提下,设置 SourceRevisionId 属性的值,即可让 SourceRevisionId 设置的内容在 InformationalVersion 属性里面追加到版本号字符串后面
如以下代码
  1. <Project Sdk="Microsoft.NET.Sdk">
  2.   <PropertyGroup>
  3.     <OutputType>WinExe</OutputType>
  4.     <TargetFramework>net7.0-windows</TargetFramework>
  5.     <Nullable>enable</Nullable>
  6.     <ImplicitUsings>enable</ImplicitUsings>
  7.     <UseWPF>true</UseWPF>
  8.     <SourceRevisionId>lindexi</SourceRevisionId>
  9.   </PropertyGroup>
  10. </Project>
复制代码
以上代码即可使用 SourceRevisionId 的信息代替默认的 git 的 commit 提交信息,拼接到版本字符串后面
以上代码运行的界面如下

更多请参阅:
本文以上的代码放在githubgitee 欢迎访问
可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用下令行 cd 下令进入此空文件夹,在下令行里面输入以下代码,即可获取到本文的代码
  1. git init
  2. git remote add origin https://gitee.com/lindexi/lindexi_gd.git
  3. git pull origin 21cb92ee87b9903552120695ecd8db785ec9dfff
复制代码
以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在下令行继承输入以下代码
  1. git remote remove origin
  2. git remote add origin https://github.com/lindexi/lindexi_gd.git
  3. git pull origin 21cb92ee87b9903552120695ecd8db785ec9dfff
复制代码
获代替码之后,进入 ChedemwoheGelnairkoni 文件夹

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

钜形不锈钢水箱

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表