最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# Winform 軟件版本號自動增加的實現(xiàn)示例

 更新時間:2025年11月07日 10:27:53   作者:熊思宇  
本文介紹了C#通過手動修改AssemblyInfo.cs文件或使用PowerShell腳本來自動管理軟件版本號,及通過配置.csproj文件來實現(xiàn)版本號的自動遞增,感興趣的可以了解一下

一、簡介

在平時的開發(fā)中,版本號的是常用的功能,除非你的程序不經(jīng)常更新,光看軟件的界面不可能就知道代碼具體改了什么。在 C# 的開發(fā)中,很多程序員依然是手動的去改版本號,但非常的麻煩,每次生成前必須去 AssemblyInfo.cs 這個類中修改,但不排除部分公司壓根不用軟件版本號這個功能,我以前就遇到過,雖然他們不用,但也不影響軟件的正常運行,不管怎樣,版本號的管理加上去還是好的。

版本號主要分為4個部分,如 1.0.0.0,分別是 主版本.次版本.構建號.修訂號。

我想定義的規(guī)則:

比如第四位滿 99,就讓第三位+1,第三位滿99,就 讓第二位+1,比如:

舊版本遞增后解釋
1.0.0.991.0.1.0修訂號 進位
1.0.99.991.1.0.0修訂號 & 構建號 進位
1.99.99.992.0.0.0修訂號 & 構建號 & 次版本號 全部進位
99.99.99.99100.0.0.0主版本號 進位

目前這套實現(xiàn)方式,就是根據(jù)這個規(guī)則來實現(xiàn)的,如果你想用其他的規(guī)則,需要自己修改。

下面的兩個實現(xiàn)方式中,方式一比較麻煩,不推薦,方式二的實現(xiàn)比較簡單,不用修改項目的配置文件,用起來也方便,推薦!

二、方式一

使用 version.txt 和 AssemblyInfo.cs 兩個文件,他們的作用如下:

1.保持“版本狀態(tài)”

version.txt 作為一個“存儲文件”,讓每次構建都能基于上一次的版本號遞增。
這樣即使你關閉 Visual Studio 或者換臺電腦,版本號還是可以從上次的版本繼續(xù)增加,而不會因為 AssemblyInfo.cs 被編譯后“丟失狀態(tài)”。

2.構建時的版本讀取

csproj 讀取 version.txt,然后傳遞給 UpdateVersion.ps1,這樣 PowerShell 不會從零開始,而是從已有的版本繼續(xù)遞增。
PowerShell 先更新 AssemblyInfo.cs,然后 再更新 version.txt,保證下次構建繼續(xù)遞增。

1.新建文件 version.txt

位置在項目的根目錄,如圖:

在 version.txt 里面填寫一個版本號:1.0.0.0

2.新建文件 UpdateVersion.ps1

位置在根目錄,可以參考上面步驟1中的圖片,內(nèi)容如下:

param(
    [string]$currentVersion,
    [string]$filePath
)

# 獲取 version.txt 的路徑
$versionFile = "$PSScriptRoot\version.txt"

# 解析版本號
$parts = $currentVersion -split "\."
$major = [int]$parts[0]
$minor = [int]$parts[1]
$build = [int]$parts[2]
$revision = [int]$parts[3]

# 版本號遞增邏輯
$revision++
if ($revision -ge 100) {
    $revision = 0
    $build++
    
    if ($build -ge 100) {
        $build = 0
        $minor++
        
        if ($minor -ge 100) {
            $minor = 0
            $major++
        }
    }
}

$newVersion = "$major.$minor.$build.$revision"

# 更新 AssemblyInfo.cs
$content = Get-Content $filePath
$content = $content -replace '\[assembly: AssemblyVersion\(".*?"\)\]', "[assembly: AssemblyVersion(`"$newVersion`")]"
$content = $content -replace '\[assembly: AssemblyFileVersion\(".*?"\)\]', "[assembly: AssemblyFileVersion(`"$newVersion`")]"
Set-Content -Path $filePath -Value $content

# 更新 version.txt
Set-Content -Path $versionFile -Value $newVersion

Write-Output $newVersion

3.修改 .csproj 文件

這個是項目的配置文件,打開后,在標簽的最后添加下面的代碼:

<Target Name="UpdateAssemblyVersion" BeforeTargets="BeforeBuild">
    <PropertyGroup>
        <VersionFile>$(ProjectDir)version.txt</VersionFile>
        <AssemblyInfoFile>$(ProjectDir)Properties\AssemblyInfo.cs</AssemblyInfoFile>
    </PropertyGroup>

    <ReadLinesFromFile File="$(VersionFile)">
        <Output TaskParameter="Lines" PropertyName="NewVersion" />
    </ReadLinesFromFile>

    <Message Text="Updating AssemblyInfo.cs with version $(NewVersion)" Importance="high" />

    <Exec Command="powershell -ExecutionPolicy Bypass -NoProfile -File &quot;$(ProjectDir)UpdateVersion.ps1&quot; &quot;$(NewVersion)&quot; &quot;$(AssemblyInfoFile)&quot;" />
</Target>

在生成項目后,或者重新生成后,版本號就會自動的+1,如圖:

同時 version.txt 里的版本號也會自動增加

打開項目的 AssemblyInfo.cs 文件,你會發(fā)現(xiàn)這里也自動更改了,如下:

二、方式二

在方式一中,必須要手動的建一個文件 version.txt,這是因為 AssemblyInfo.cs 文件有時候在項目遷移過程中,可能會丟失,或者多人合作,導致版本號異常,如果你是單人,也可以直接修改 AssemblyInfo.cs 來讓版本號自動增加

對比方式一,方法二的實現(xiàn)就非常的簡單了,這個是我比較喜歡的方式。

1.新建文件 UpdateVersion.ps1

位置在項目的根目錄,內(nèi)容如下:

# 獲取當前腳本所在的項目根目錄
$projectPath = Split-Path -Parent $MyInvocation.MyCommand.Path
$assemblyInfoPath = "$projectPath\Properties\AssemblyInfo.cs"

# 檢查文件是否存在
if (-Not (Test-Path $assemblyInfoPath)) {
    Write-Output "Error: AssemblyInfo.cs not found at $assemblyInfoPath"
    exit 1
}

# 讀取文件內(nèi)容
$content = Get-Content $assemblyInfoPath -Raw

# 匹配版本號
$pattern = '\[assembly: AssemblyVersion\("(\d+)\.(\d+)\.(\d+)\.(\d+)"\)\]'

if ($content -match $pattern) {
    $major = [int]$matches[1]
    $minor = [int]$matches[2]
    $build = [int]$matches[3]
    $revision = [int]$matches[4]

    # 版本號遞增邏輯
    $revision++
    if ($revision -ge 100) {
        $revision = 0
        $build++
    }
    if ($build -ge 100) {
        $build = 0
        $minor++
    }
    if ($minor -ge 100) {
        $minor = 0
        $major++
    }

    # 生成新的版本號
    $newVersion = "$major.$minor.$build.$revision"

    # 替換 AssemblyInfo.cs 中的版本號
    $newContent = $content -replace $pattern, "[assembly: AssemblyVersion(`"$newVersion`")]"
    $newContent = $newContent -replace '\[assembly: AssemblyFileVersion\("(\d+)\.(\d+)\.(\d+)\.(\d+)"\)\]', "[assembly: AssemblyFileVersion(`"$newVersion`")]"

    # 寫回文件
    Set-Content -Path $assemblyInfoPath -Value $newContent -Encoding UTF8

    Write-Output "Updated version to $newVersion"
} else {
    Write-Output "AssemblyVersion not found in $assemblyInfoPath!"
}

位置:

2.添加“生成后事件命令行”

打開項目,在 項目的屬性 --> 生成事件 --> 生成后事件命令行 輸入了提供的命令,就能完成這個需求

命令:

powershell -ExecutionPolicy Bypass -File "$(ProjectDir)UpdateVersion.ps1"

位置:

效果:

每次生成,或者重新生成后,這里都會自動+1。

如果你想讀取這些版本號,可以這么做:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Test5
{
    public partial class Form1: Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Console.WriteLine("程序集版本號:{0}", GetAssemblyVersion());
            Console.WriteLine("程序集文件版本號:{0}", AssemblyFileVersion());
        }

        /// <summary>
        /// 讀取程序集版本號
        /// </summary>
        /// <returns></returns>
        private string GetAssemblyVersion()
        {
            var assembly = Assembly.GetExecutingAssembly();
            return assembly?.GetName().Version?.ToString();
        }

        /// <summary>
        /// 讀取程序集文件版本號
        /// </summary>
        /// <returns></returns>
        private string AssemblyFileVersion()
        {
            object[] attributes = Assembly.GetExecutingAssembly()
                .GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false);
            if (attributes.Length != 0)
                return ((AssemblyFileVersionAttribute)attributes[0]).Version;
            else
                return string.Empty;
        }
    }
}

運行:

到此這篇關于C# Winform 軟件版本號自動增加的實現(xiàn)示例的文章就介紹到這了,更多相關C# Winform 軟件版本號自動增加內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用Spire.PDF在C#中創(chuàng)建和繪制PDF表單的方法步驟

    使用Spire.PDF在C#中創(chuàng)建和繪制PDF表單的方法步驟

    在日常開發(fā)中,我們經(jīng)常需要處理各種文檔,其中PDF因其跨平臺、安全性高而成為企業(yè)級應用中不可或缺的一部分,然而,手動創(chuàng)建、填寫或管理PDF表單無疑是一項耗時且易出錯的任務,所以本文給大家介紹了如何使用Spire.PDF在C#中創(chuàng)建和繪制 PDF 表單,需要的朋友可以參考下
    2025-08-08
  • C#實現(xiàn)Workstation相關功能過程

    C#實現(xiàn)Workstation相關功能過程

    本文提供了實現(xiàn)Workstation功能的C#代碼示例,涵蓋工作站管理、遠程控制、性能監(jiān)控和定時任務等核心模塊,代碼結構清晰,可根據(jù)需要擴展,但使用時需注意網(wǎng)絡權限和異常處理
    2026-05-05
  • C#把數(shù)字轉(zhuǎn)換成大寫金額的代碼實例

    C#把數(shù)字轉(zhuǎn)換成大寫金額的代碼實例

    這篇文章主要介紹了C#把數(shù)字轉(zhuǎn)換成大寫金額的代碼實例,例如把200轉(zhuǎn)換成“貳佰元”,需要的朋友可以參考下
    2014-05-05
  • C#命令模式用法實例

    C#命令模式用法實例

    這篇文章主要介紹了C#命令模式用法,以實例形式較為詳細的分析了C#命令模式的功能、定義及使用技巧,需要的朋友可以參考下
    2015-07-07
  • 詳解Winform里面的緩存使用

    詳解Winform里面的緩存使用

    這篇文章主要介紹了Winform里面的緩存使用,有需要的朋友可以參考一下
    2014-01-01
  • 淺談C#中Action和Func回調(diào)的常用方式

    淺談C#中Action和Func回調(diào)的常用方式

    Action和Func泛型委托實際上就是一個.NET?Framework預定義的委托,本文主要介紹了C#中Action和Func回調(diào)的常用方式,具有一定的參加價值,感興趣的可以了解一下
    2022-03-03
  • DataGridView自定義單元格表示值、Error圖標顯示的方法介紹

    DataGridView自定義單元格表示值、Error圖標顯示的方法介紹

    這篇文章介紹了DataGridView自定義單元格表示值、Error圖標顯示的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-02-02
  • 磁盤配額的wmi版本(C#)

    磁盤配額的wmi版本(C#)

    磁盤配額的wmi版本(C#)...
    2007-03-03
  • C#設計模式之簡單工廠模式

    C#設計模式之簡單工廠模式

    這篇文章介紹了C#設計模式之簡單工廠模式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • C#書寫規(guī)范

    C#書寫規(guī)范

    C#書寫規(guī)范...
    2007-03-03

最新評論

浦县| 桐乡市| 五指山市| 五大连池市| 佳木斯市| 兴安县| 仪征市| 南昌市| 棋牌| 遵化市| 布拖县| 沿河| 隆德县| 昌吉市| 南靖县| 获嘉县| 长治县| 乐陵市| 和硕县| 文成县| 本溪市| 东丰县| 正定县| 民乐县| 固安县| 牟定县| 长白| 青阳县| 潢川县| 太仓市| 商南县| 社旗县| 新余市| 青海省| 逊克县| 泸西县| 会昌县| 深水埗区| 镇沅| 南召县| 河曲县|