我在一个 WPF 项目里面,在界面显示应用的版本号,更新到 dotnet 8 的 SDK 之后,发现我的界面布局损坏了。本质上这个破坏性改动和 WPF 没有什么关系,是 dotnet 的 SDK 或编译器的破坏性变更,在 AssemblyInformationalVersionAttribute 的 InformationalVersion 属性里面写入了当前的 git 的 commit 提交号

咱可以非常方便写出代码获取到当前应用的版本号信息,如下面代码,我新建了一个简单的 WPF 界面用来显示当前应用的版本号

    <Grid>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
<Run Text="当前版本号:"/>
<Run x:Name="AppVersionRun"></Run>
</TextBlock>
</Grid>

对应的后台 cs 代码如下

    public MainWindow()
{
InitializeComponent(); var assemblyInformationalVersionAttribute = GetType().Assembly.GetCustomAttributes<System.Reflection.AssemblyInformationalVersionAttribute>().First();
AppVersionRun.Text = assemblyInformationalVersionAttribute.InformationalVersion;
}

在使用 dotnet 8 的 SDK 构建时,无论使用的运行时是 dotnet 6 还是 dotnet 7 等,都会在 InformationalVersion 里面拿到 版本号+commit 格式的字符串,如下图

此变更不仅修改了版本号字符串,还影响了 VisualStudio 的热重载

obj\Debug\net7.0-windows\Xxx.AssemblyInfo.cs (第 17 行): 错误 ENC0003: 更新“属性”需要重启应用程序。

如果不想要在 InformationalVersion 里面拿到的版本号信息包含 commit 信息,则可以在 csproj 里面配置 IncludeSourceRevisionInInformationalVersion 属性设置为 false 值,如下面代码

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

  <PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net7.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF>
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
</PropertyGroup> </Project>

修改之后的重新构建应用运行,可以看到此时界面只显示版本号

如果想要自定义版本号后面添加的信息,可以通过配置 SourceRevisionId 属性。在没有设置 IncludeSourceRevisionInInformationalVersion 为 false 的前提下,设置 SourceRevisionId 属性的值,即可让 SourceRevisionId 设置的内容在 InformationalVersion 属性里面追加到版本号字符串后面

如以下代码

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

  <PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net7.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF>
<SourceRevisionId>lindexi</SourceRevisionId>
</PropertyGroup> </Project>

以上代码即可使用 SourceRevisionId 的信息代替默认的 git 的 commit 提交信息,拼接到版本字符串后面

以上代码运行的界面如下

更多请参阅:

本文以上的代码放在githubgitee 欢迎访问

可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 21cb92ee87b9903552120695ecd8db785ec9dfff

以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 21cb92ee87b9903552120695ecd8db785ec9dfff

获取代码之后,进入 ChedemwoheGelnairkoni 文件夹

dotnet 8 破坏性改动 在 AssemblyInformationalVersionAttribute 添加上 git 的 commit 号的更多相关文章

  1. mysql添加上log_bin步骤如下

    mysql添加上log_bin步骤如下

  2. input标签添加上disable属性在移动端(ios)字体颜色及边框颜色不兼容的解决办法。

    手机一些兼容性问题: 1.苹果手机输入框input:disabled显示模糊问题 input:disabled, input[disabled]{ color: #5c5c5c; -webkit-te ...

  3. IIS6.0添加上.net4.0后,以前的.net系统出现“服务器应用程序不可用”的错误提示解决办法

    把VS2010开发的网站.net4.0部署到Windows Server 2003的服务器上去, Windows Server 2003操作系统自带的为IIS 6.0,IIS 6.0一般只支持.NET ...

  4. cocopod 中添加第三方框架,包含静态库文件,使用svn添加上传

    step one: 进入静态库文件的目录 cd 路径: step two:使用命令添加 svn add 静态库名字; 然后更新一下代码就OK

  5. SSH上一个随笔的基础上添加上hibernate支持

    配置文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o ...

  6. 安卓高级3 RecyclerView结合SwipeRefreshLayout并添加上拉

    目录结构: 效果图: MainActivity.java package qianfeng.com.pullrecyclerviewdemo; import android.os.Bundle; im ...

  7. input标签添加上disable属性在ios端字体颜色不兼容的问题

    input[disabled],input:disabled,input.disabled{ color: #3e3e3e; -webkit-text-fill-color: #3e3e3e; -we ...

  8. 在项目引用里添加上对Microsoft Word 11.0 object library的引用

    private void button1_Click(object sender, System.EventArgs e) { //调用打开文件对话框获取要打开的文件WORD文件,RTF文件,文本文件 ...

  9. 给定一颗完全二叉树,给每一层添加上next的指针,从左边指向右边

    给你机会发出声音,但是不给你机会证明高层的决定是错的 RT: 时间复杂度O(n) 空间复杂度O(1)  原理就是有指针指向父节点和当前的节点,左孩子必指向右孩子,右孩子必指向父节点的下一个节点的左孩子 ...

  10. input标签添加上disable属性在移动端字体颜色不兼容的解决办法。

    input[disabled],input:disabled,input.disabled{ color: #999; -webkit-text-fill-color:#999; -webkit-op ...

随机推荐

  1. 三维模型3DTile格式轻量化压缩处理工具常用几款软件介绍

    三维模型3DTile格式轻量化压缩处理工具常用几款软件介绍 三维模型3DTile格式的轻量化处理旨在减少模型的存储空间和提高渲染性能.以下是一些推荐的工具软件,可以用于实现这个目的: MeshLab: ...

  2. Cesium之DrawCommand与绘制三角形

    1. 引言 Cesium中的Command对象包含执行的指令参数和执行方法,Command对象主要有三类: ClearCommand DrawCommand ComputeCommand DrawCo ...

  3. 舒服了,学习了,踩到一个 Lombok 的坑!

    你好呀,我是歪歪. 踩坑了啊,最近踩了一个 lombok 的坑,有点意思,给你分享一波. 我之前写过一个公共的服务接口,这个接口已经有好几个系统对接并稳定运行了很长一段时间了,长到这个接口都已经交接给 ...

  4. Unicode编码解码的全面介绍

    1. Unicode的起源和发展 Unicode是一个国际标准,旨在统一世界上所有文字的表示方式.它最初由Unicode协会创立,解决了不同字符集之间的兼容性问题.Unicode的发展经历了多个版本, ...

  5. 高德地图和echarts结合实现地图下钻(二)

    一.学习ajax发送异步请求 1 $(function(){ 2 //请求参数 3 var list = {}; 4 // 5 $.ajax({ 6 //请求方式 7 type : "POS ...

  6. 测试开发之网络篇-OSI七层协议

    今天,我们来了解一下OSI(Open System Interconnect)开放式系统互连.它是ISO组织在1985年发布的网络互连模型,该标准定义了网络互连的七层框架.其内容简述如下: 我们办公室 ...

  7. CTFshow pwn31 wp

    PWN31 使用checksec查看保护 发现除了canary剩下保护全开,那么就没有前面几个题目那么简单了,ida打开看见他给了我们main函数地址 虽然开了pie但是在他们之间的偏移是一定的,那么 ...

  8. Jetty的ssl模块

    启用ssl模块,执行如下命令: java -jar $JETTY_HOME/start.jar --add-modules=ssl 命令的输出,如下: INFO : ssl initialized i ...

  9. 一种基于DeltaE(CIE 1976)的找色算法Cuda实现

    书接上文 一种基于DeltaE(CIE 1976)的找色算法 Delta E 是评估色彩准确度的重要测量指标.摄影师.影片编辑和平面设计师等创意专业人士都应重视这项标准,因其是选择专业级显示器的重要考 ...

  10. MogDB/openGauss数据库package关键字的两种用法

    MogDB/openGauss 数据库 package 关键字的两种用法 本文出处:https://www.modb.pro/db/237701 package 关键字在 MogDB 数据库里有两种用 ...