VS项目,在生成的时候自动修改版本号
demo示例:https://gitee.com/chenheze90/L28_AutoVSversion
可通过下载demo运行即可。
原理:通过csproject项目文件中的Target标签,实现在项目编译之前对项目版本号进行修改,避免手动修改;
1.基础版
效果图如下


部分脚本如下:
<Project>
<PropertyGroup><PreBuildEvent></PreBuildEvent></PropertyGroup><Target Name="SetAssemblyVersion" BeforeTargets="BeforeBuild"><PropertyGroup><Year>$([System.DateTime]::Now.ToString("yy"))</Year><MonthDay>$([System.DateTime]::Now.ToString("MMdd"))</MonthDay></PropertyGroup><Message Text="Setting AssemblyVersion to 1.0.$(Year).$(MonthDay)" Importance="high" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="//using System.Reflection;" Overwrite="true" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyTitle("MyAPPTitle")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyDescription("2021.03.29")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyConfiguration("")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyCompany("")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyProduct("MyPro")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyCopyright("Copyright ? CCC")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyTrademark("")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyCulture("")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Runtime.InteropServices.ComVisible(false)]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Windows.ThemeInfo(System.Windows.ResourceDictionaryLocation.None, System.Windows.ResourceDictionaryLocation.SourceAssembly)]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyVersion("01.00.00$(Year).$(MonthDay)")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyFileVersion("01.00.00$(Year).$(MonthDay)")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyInformationalVersion("01.00.00$(Year).$(MonthDay)")]" Overwrite="false" /></Target>
</Project>
2.进阶版
部分项目要自定义生成版本号,可通过自定义类的方式来实现。
1.新建项目ClassLibrary1
2.引用系统类库sing Microsoft.Build.Framework;;using Microsoft.Build.Utilities;
3.新建类GenerateVersionTask
public class GenerateVersionTask : Task{[Output]public int Version { get; set; }public override bool Execute(){// 生成版本号的逻辑Version = GetVisitCount();return true;}private const string DataFilePath = "visit_counter.dat";public static int GetVisitCount(){// 读取存储的数据int visitCount = 0; DateTime lastVisitDate = DateTime.Now;ReadData(ref visitCount, ref lastVisitDate);// 获取当前日期DateTime today = DateTime.Today;// 检查是否是新的一天if (lastVisitDate < today){// 重置访问次数visitCount = 0;lastVisitDate = today;}// 增加访问次数visitCount++;// 保存数据SaveData(visitCount, lastVisitDate);// 返回访问次数return visitCount;}private static void ReadData(ref int count, ref DateTime countdate){if (File.Exists(DataFilePath)){string[] lines = File.ReadAllLines(DataFilePath);if (lines.Length == 2){int visitCount = int.Parse(lines[0]);DateTime lastVisitDate = DateTime.Parse(lines[1]);count = visitCount; countdate = lastVisitDate;}}else{File.Create(DataFilePath);count = 0; countdate = DateTime.Now;}}private static void SaveData(int visitCount, DateTime lastVisitDate){string[] lines = { visitCount.ToString(), lastVisitDate.ToString() };File.WriteAllLines(DataFilePath, lines);}}
4.增加脚本
<UsingTask TaskName="GenerateVersionTask" AssemblyFile="$(TargetDir)\ClassLibrary1.dll" />
和
<GenerateVersionTask><Output TaskParameter="Version" PropertyName="MyVersion" /></GenerateVersionTask>
效果如图所示
<UsingTask TaskName="GenerateVersionTask" AssemblyFile="$(TargetDir)\ClassLibrary1.dll" /><Target Name="SetAssemblyVersion" BeforeTargets="BeforeBuild"><PropertyGroup><Year>$([System.DateTime]::Now.ToString("yy"))</Year><MonthDay>$([System.DateTime]::Now.ToString("MMdd"))</MonthDay></PropertyGroup><GenerateVersionTask><Output TaskParameter="Version" PropertyName="MyVersion" /></GenerateVersionTask><Message Text="Generated Version: $(MyVersion)" Importance="high" /><Message Text="Setting AssemblyVersion to 01.0$(MyVersion).00$(Year).$(MonthDay)" Importance="high" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="//using System.Reflection;" Overwrite="true" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyTitle("MyAPPTitle")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyDescription("2021.03.29")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyConfiguration("")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyCompany("")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyProduct("MyPro")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyCopyright("Copyright ? CCC")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyTrademark("")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyCulture("")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Runtime.InteropServices.ComVisible(false)]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Windows.ThemeInfo(System.Windows.ResourceDictionaryLocation.None, System.Windows.ResourceDictionaryLocation.SourceAssembly)]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyVersion("01.0$(MyVersion).00$(Year).$(MonthDay)")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyFileVersion("01.0$(MyVersion).00$(Year).$(MonthDay)")]" Overwrite="false" /><WriteLinesToFile File="$(MSBuildThisFileDirectory)Properties\AssemblyInfo.cs" Lines="[assembly: System.Reflection.AssemblyInformationalVersion("01.0$(MyVersion).00$(Year).$(MonthDay)")]" Overwrite="false" /></Target>
</Project>
相关文章:
VS项目,在生成的时候自动修改版本号
demo示例:https://gitee.com/chenheze90/L28_AutoVSversion 可通过下载demo运行即可。 原理:通过csproject项目文件中的Target标签,实现在项目编译之前对项目版本号进行修改,避免手动修改; 1.基础版 效果图如下 部…...
【蓝桥杯】43699-四平方和
四平方和 题目描述 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去,就正好可以表示为 4 个数的平方和。 比如: 502021222 712121222; 对于一个给定的正整数,可…...
我的“双胞同体”发布模式的描述与展望
当被“激情”晕染,重创标题、摘要探索“吸睛”。 (笔记模板由python脚本于2024年12月19日 15:23:44创建,本篇笔记适合喜欢编撰csdn博客的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免…...
flask_socketio 以继承 Namespace方式实现一个网页聊天应用
点击进入上一篇,可作为参考 实验环境 python 用的是3.11.11 其他环境可以通过这种方式一键安装: pip install flask3.1.0 Flask-SocketIO5.4.1 gevent-websocket0.10.1 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple pip list 详情如下&am…...
go mod tidy 命令
go mod tidy 是 Go 语言的命令,用于清理和更新 go.mod 和 go.sum 文件。它主要有以下功能: 移除未使用的依赖项:从 go.mod 文件中删除那些在代码中不再使用的依赖项。 添加缺失的依赖项:添加代码中使用但尚未记录在 go.mod 文件中…...
(11)YOLOv9算法基本原理
一、YOLOv9 的结构 YOLOv9 引入了可编程梯度信息(PGI),以及基于梯度路径规划的新型轻量级网络架构,为目标检测领域带来了突破性的成果。 Yolov9 网络模型主要由BackBone(主干网络)、Neck(颈层&…...
python学opencv|读取图像(十七)认识alpha通道
【1】引言 前序学习进程中,我们已经掌握了RGB和HSV图像的通道拆分和合并,获得了很多意想不到的效果,相关链接包括且不限于: python学opencv|读取图像(十二)BGR图像转HSV图像-CSDN博客 python学opencv|读…...
中小学教室多媒体电脑安全登录解决方案
中小学教室多媒体电脑面临学生随意登录的问题,主要涉及到设备使用、网络安全、教学秩序等多个方面。以下是对这一问题的详细分析: 一、设备使用问题 1. 设备损坏风险 学生随意登录可能导致多媒体电脑设备过度使用,增加设备损坏的风险。不当…...
Redis篇之Redis高可用模式参数调优,提高Redis性能
1. Redis高可用模式核心 Redis高可用模式的核心是使用主从复制和自动故障转移机制来确保系统在某些节点发生故障时仍然可以正常工作。 常用的高可用架构包括Redis Sentinel模式和Redis Cluster模式,其中Sentinel模式是为了提供高可用性而专门设计的解决方案。 在Re…...
linux-----进程execl簇函数
execl函数族概述 在Linux中,execl函数族用于在一个进程中加载并执行一个新的程序,它会替换当前进程的地址空间(代码段、数据段、堆和栈等)。这个函数族包括execl、execlp、execle、execv、execvp和execvpe,它们的主要功…...
Vue + ECharts 实现山东地图展示与交互
这篇文章中,我将逐步介绍如何使用 Vue 和 ECharts 实现一个互动式的地图展示组件,其中支持返回上一层地图、点击查看不同城市的详细信息,以及根据数据动态展示不同的统计信息。 效果图:玩转山东地图:用Echarts打造交互…...
【Verilog】UDP用户原语
User-defined primitives 概述基本语法组合逻辑的UDP时序逻辑的UDPUDP 符号表 Verilog HDL(简称 Verilog )是一种硬件描述语言,用于数字电路的系统设计。可对算法级、门级、开关级等多种抽象设计层次进行建模。 Verilog 不仅定义了语法&…...
问题小记-达梦数据库报错“字符串转换出错”处理
最近遇到一个达梦数据库报错“-6111: 字符串转换出错”的问题,这个问题主要是涉及到一条sql语句的执行,在此分享下这个报错的处理过程。 问题表现为:一样的表结构和数据,执行相同的SQL,在Oracle数据库中执行正常&…...
MyBatis入门的详细应用实例
目录 MyBatis第一章:代理Dao方式的CRUD操作1. 代理Dao方式的增删改查 第二章:MyBatis参数详解1. parameterType2. resultType 第三章:SqlMapConfig.xml配置文件1. 定义properties标签的方式管理数据库的信息2. 类型别名定义 MyBatis 第一章&…...
Sequelize ORM sql 语句工具
Sequelize ORM sql 语句工具 初始化配置 Sequelize orm 配置文章落日沉溺于海 在命令行中全局安装 npm i -g sequelize-clisequelize 执行需要匹配 mysql2 对应的依赖(安装 mysql2) npm i sequelize mysql2初始化项目 sequelize init熟悉初始化项目后…...
增强LabVIEW与PLC通信稳定性
在工业自动化系统中,上位机与PLC之间的通信稳定性至关重要,尤其是在数据采集和控制任务的实时性要求较高的场景中。LabVIEW作为常用的上位机开发平台,通过合理优化通信协议、硬件接口、数据传输方式以及系统容错机制,可以大大提升…...
UDP系统控制器_音量控制、电脑关机、文件打开、PPT演示、任务栏自动隐藏
UDP系统控制器(ShuiYX) 帮助文档 概述 本程序设计用于通过UDP协议接收指令来远程控制计算机的音量、执行特定命令和其他功能。为了确保程序正常工作,请确认防火墙和网络设置允许UDP通信,并且程序启动后会最小化到托盘图标。 命令格式及说明 音量控制…...
NK细胞杀伐功能如何实现?
在人体的免疫系统中,自然杀伐细胞(Natural Killer Cells,简称NK细胞)是一类完全自然的免疫激活力量。它们为人体提供了快速反应能力,不依赖类元的特定识别力,但能直接寻找和毁灭毒病感染细胞和肿瘤细胞。那…...
Ubuntu搭建ES8集群+加密通讯+https访问
目录 写在前面 一、前期准备 1. 创建用户和用户组 2. 修改limits.conf文件 3. 关闭操作系统swap功能 4. 调整mmap上限 二、安装ES 1.下载ES 2.配置集群间安全访问证书密钥 3.配置elasticsearch.yml 4.修改jvm.options 5.启动ES服务 6.修改密码 7.启用外部ht…...
PC寄存器(Program Counter Register)jvm
在JVM(Java虚拟机)中,PC寄存器(Program Counter Register)扮演着至关重要的角色。以下是对JVM中PC寄存器的详细解释: 一、定义与功能 定义: JVM中的PC寄存器,也被称为程序计数器,是对物理PC寄存器的一种抽象模拟。它用于存储当前线程所执行的字节码指令的地址,即指…...
Idea高效开发秘籍:从快捷键到性能优化全解析
1. 快捷键操作:指尖飞舞的代码艺术 第一次用Idea时,我被同事行云流水的操作惊呆了——他几乎不用鼠标,光靠键盘就能在几秒内完成类创建、方法跳转、代码重构。后来才发现,这都归功于精准的快捷键组合。比如用CtrlAltV提取变量时&a…...
虚假新闻检测数据集中的隐藏偏见
在2021年欧洲计算语言学协会(EACL)会议上,我们的论文《虚假新闻检测数据集中的隐藏偏见》荣获最佳长篇论文提名。该论文研究了研究社区用于开发自动识别虚假新闻模型的数据集,发现这些数据集存在偏见,而这些偏见正是以…...
元脉网络旗舰级本土芯片交换机S12700 打造数智化园区新引擎
在数字经济与产业变革深度融合的时代背景下,园区作为经济发展与科技创新的核心载体之一,正迎来全方位的数智化变革浪潮。近日,元脉网络推出基于本土芯片设计的旗舰级园区核心交换机——S12700系列,兼具无阻塞转发、多维可靠、全栈…...
基于深度学习的本科毕业设计
1 适用对象 本科生关于目标检测、语义分割的毕业设计。 2 深度学习基础知识 2.1 深度学习理论 (1) 吴恩达深度学习视频(转载)https://www.bilibili.com/video/BV1Gm421u73z/?spm_id_from333.337.search-card.all.click&v…...
JdonFramework性能优化指南:从内存模型到事件处理
JdonFramework性能优化指南:从内存模型到事件处理 【免费下载链接】jdonframework Domain-Driven-Design Pub/Sub Domain-Events framework 项目地址: https://gitcode.com/gh_mirrors/jd/jdonframework JdonFramework是一个基于领域驱动设计(DDD)的事件驱动…...
终极指南:Distroless容器的GC调优与内存泄漏预防策略
终极指南:Distroless容器的GC调优与内存泄漏预防策略 【免费下载链接】distroless 🥑 Language focused docker images, minus the operating system. 项目地址: https://gitcode.com/GitHub_Trending/di/distroless Distroless容器作为精简操作…...
Qwen2-VL-2B-Instruct应用场景:工业质检中缺陷描述文本与异常图像样本库匹配
Qwen2-VL-2B-Instruct在工业质检中的应用:缺陷描述与异常图像样本库的智能匹配 1. 引言:工业质检的痛点与AI解法 在工厂的生产线上,质检员每天都要面对成千上万的零部件。发现一个划痕、一个凹坑、或者一处颜色不均,他们需要在厚…...
all-MiniLM-L6-v2多场景落地:智能办公助手语义理解、会议纪要关键句提取、邮件分类
all-MiniLM-L6-v2多场景落地:智能办公助手语义理解、会议纪要关键句提取、邮件分类 你是不是也经常被这些办公琐事搞得头大?每天要处理上百封邮件,分不清哪些是重要通知,哪些是垃圾广告;开完会面对几小时的录音和混乱…...
Linux服务器外网访问失败的5个常见坑点(附详细排查命令)
Linux服务器外网访问失败的5个系统性排查指南 刚部署完项目却发现外网无法访问?这可能是每个Linux运维新手都会遇到的"成人礼"。不同于零散的问题解决,本文将用系统化的排查思路,带你从底层网络原理到实操命令,彻底掌握…...
零基础玩转LobeChat:一键部署开源聊天机器人,支持语音和多模态
零基础玩转LobeChat:一键部署开源聊天机器人,支持语音和多模态 想不想拥有一个完全属于自己的智能聊天助手?它界面漂亮,反应迅速,不仅能像ChatGPT一样和你聊天,还能听懂你的语音,看懂你上传的图…...
