首页 > 其他分享 >dotnet 8 破坏性改动 在 AssemblyInformationalVersionAttribute 添加上 git 的 commit 号

dotnet 8 破坏性改动 在 AssemblyInformationalVersionAttribute 添加上 git 的 commit 号

时间:2024-04-25 09:24:35浏览次数:15  
标签:git 版本号 代码 AssemblyInformationalVersionAttribute dotnet commit InformationalVers

我在一个 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 文件夹

标签:git,版本号,代码,AssemblyInformationalVersionAttribute,dotnet,commit,InformationalVers
From: https://www.cnblogs.com/lindexi/p/17852947.html

相关文章

  • dotnet 修复多框架 TargetFrameworks 包含不受支持平台导致构建失败
    本文将告诉大家如何修复dotnet项目里的多框架TargetFrameworks如果包含了当前系统无法支持的平台时,如何进行跳过。解决在Linux平台构建时提示MacCatalyst不受支持而构建失败故事的背景是我期望在GitHub的Action里面构建一个项目,我期望能够在Windows和Linux和Ma......
  • 记 dotnet 8.0.4 修复的 WPF 的触摸模块安全问题
    本文记录dotnet8.0.4版本修复的WPF的触摸模块安全问题,此问题影响所有的.NET版本,修复方法是更新SDK和运行时宣布安全漏洞地址:https://github.com/dotnet/wpf/issues/9003安全漏洞宣布地址:https://github.com/dotnet/announcements/issues/303漏洞代号:CVE-2024-21409......
  • 修复 Debian 安装 dotnet 失败 depends on ca-certificates
    本文记录我在Debian安装dotnet失败,报错信息是packages-microsoft-proddependsonca-certificates;however:Packageca-certificatesisnotinstalled.一开始按照官方的以下代码例子进行安装packages-microsoft-prod.deb文件,命令如下sudodpkg-ipackages-microsof......
  • https://github.com/meta-llama/llama3 文生图
    https://github.com/meta-llama/llama3 Skiptocontent NavigationMenu Product Solutions OpenSource Pricing Searchorjumpto...  SigninSignup  meta-llama/llama3PublicNotificationsFork 1.4k Star ......
  • 面试被刷,原因居然是不会Git
    大家好,我是知微!假设你是一个刚入行的菜狗程序员,正在开发一个软件。现在老板需要你加一些功能,此时的你有一些担忧,如果对代码进行大刀阔斧的改动,最终却失败了。之前能正常运行的代码也被改得乱七八糟的,跑不起来了,那可咋办?聪明的你想到了一个绝妙的主意,那就是把正常的代码复制一......
  • Git教程
    1、创建目录(本地无GitHub上的目录,首次创建)为了保证本地目录与远程github上的目录一致,第一次使用时,需使用TortoiseGit中的clone(克隆)与远程目录进行同步,操作步骤如下,选择本地磁盘下的某一目录,本文在E盘下新建了一个文件夹git,进入git文件夹后点击鼠标右键选择下面的GitClone,克......
  • git进入vim模式的处理
    1、当gitcommit没-m输入说明时,我们会进入vim模式,在此模式下可以进行提交说明;2、输入i,进入insert输入模式,输入自己提交内容的说明;3、输入完后,按ESC,下方insert消失;4、输入":",再输wq(写权限及退出),回车,这就完成了,回到命令输入界面补充:按Esc进入普通模式输入:q退出编辑器(若......
  • git不同项目提交时,显示不同的用户名
    场景在使用git时,不同项目想使用不同的名称和邮箱解决方法每个项目独立设置不同的名称和邮箱项目clone下来后,使用如下命令gitconfig--localuser.name'yourname'gitconfig--localuser.name'youremail'或者直接修改.git/config文件,加入下列配置[user]name......
  • Mysql:canal-deployer:如何阻断canal-client对deployer上的filter过滤条件订阅修改:https
     也算是安全管理上的一个控制点:本来,允许客户端去根据自己的实际需求去服务端订阅自己关心的数据流,是很好的。but,但是,服务端的黑白名单过滤,尤其是白名单的filter条件会被客户端的最新订阅的过滤条件给覆盖!!!这算是bug吗?上游服务端怎么显得那么没地位呢!!!??? #===================......
  • 【转载】git push到远程指定分支(git拉取指定分支代码)
     一、pull操作1、将远程指定分支拉取到本地指定分支上:gitpullorigin<远程分支名>:<本地分支名> (注:命令里的尖括号<>只是包裹中文的标识,方便你看的,实际使用时不用写,不过冒号需要)2、将远程指定分支拉取到本地当前分支上:gitpullorigin<远程分支名> 3、将与......