用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
dotnet 8 破坏性改动 在 AssemblyInformationalVersionA ...
dotnet 8 破坏性改动 在 AssemblyInformationalVersionAttribute 添加上 gi ...
钜形不锈钢水箱
论坛元老
|
2024-5-18 08:12:58
|
显示全部楼层
|
阅读模式
楼主
主题
1947
|
帖子
1947
|
积分
5841
我在一个 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 提交信息,拼接到版本字符串后面
以上代码运行的界面如下
更多请参阅:
MSBuild properties for Microsoft.NET.Sdk - .NET Microsoft Learn
Git commit ID included in assembly ProductVersion field when building with sdk 8 · Issue #34568 · dotnet/sdk
c# - FileVersionInfo.ProductVersion suddenly contains git commit hash - Stack Overflow
本文以上的代码放在
github
和
gitee
欢迎访问
可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用下令行 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 文件夹
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
钜形不锈钢水箱
论坛元老
这个人很懒什么都没写!
楼主热帖
Linux——环境基础开发工具的使用 ...
详细介绍如何在ubuntu20.04中安装ROS系 ...
Android Studio第12课关于databinding ...
架构师说低代码:走出半生,归来仍是“ ...
HCIA学习笔记四:华为设备登录信息 ...
Android Studio实现音乐播放器2.0 ...
【小程序专栏】多种开发方式对比-跨端 ...
Jenkins发布uniapp开发的H5遇到的问题 ...
SAP FICO+MM测试环境
在Web前端基于CAD图实现等值线在线分析 ...
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
Oracle
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表