VS中實時獲取SVN的版本號並寫入到AssemblyInfo.cs中

$在開發項目時,須要知道當前發佈的究竟是哪一個版本,比較好的方式就是獲取SVN的版原本做爲項目的版本。項目版本通常由主版本、次版本、內部版本、修改版本四個部分組成,咱們獲取的SVN版本就做爲修改版本便可。這裏須要利用SVN的SubWCRev.exe來實現,通常安裝了SVN後都會有的。SubWCRev.exe獲取SVN版本並依據模板文件,更新到相應的目標文件中。下面是具體的步驟。html

1.將項目中Properties中的AssemblyInfo.cs文件複製一份,命名爲AssemblyInfo.template.cs,同時將該文件的編譯屬性設置爲無。設置爲無是爲了避免讓該文件不參與編譯。web

同時將[assembly: AssemblyVersion("1.0.0.538")]和[assembly: AssemblyFileVersion("1.0.0.538")]修改成[assembly: AssemblyVersion("1.0.0.$WCREV$")]和[assembly: AssemblyFileVersion("1.0.0.$WCREV$")],以下圖ide

其中$WCREV$是SubWCRev.exe用來匹配而後替換成最新版本號的,必需要這個名字。svn

2.在項目屬性的生成事件中,添加預先生成事件命令,命令內容爲SubWCRev $(SolutionDir)   $(ProjectDir)Properties\AssemblyInfo.template.cs  $(ProjectDir)Properties\AssemblyInfo.cs,以下圖工具

3.編譯生成後,能夠看到AssemblyInfo.cs中的版本號已經變了,以下圖post

4.代碼中取得該版本號並顯示,代碼以下ui

 

this.Text += String.Format("({0})", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString());
 
結果以下圖所示


轉載請註明出處this

 

 

出處:https://blog.csdn.net/xxdddail/article/details/49280375編碼

=========================================================================spa

VS中的Properties下的AssemblyInfo.cs能夠設置相應的版本號。下面是AssemblyInfo.cs設置版本的方式。

 

  1.  
    [assembly: AssemblyVersion("1.0.0.0")]
  2.  
    [assembly: AssemblyFileVersion("1.0.0.0")]
可是,這個須要每次都設定,並且與SVN上的版本號並不一致,追塑起來不是很方便。因此就想着取SVN上的版本號做爲項目的版本號。要獲得SVN的版本號,能夠在SVN的節眯下,經過SVN的命令svn info來得到信息。這經過CMD命令很容易能夠達到,不過,我但願在VS編譯時,每次都去獲取,因此選擇了在VS預生成事件命令中去執行。看下圖

預生成事件命令行中輸入相應的CMD命令。

1.svn info>svn_info.txt 是執行SVN命令,獲取相應的版本信息,而後存到svn_info.txt的文件中。
2.findstr "Revision" svn_info.txt>..\svn_version.dll 從svn_info.txt中查找出版本號,並存到svn_version.dll中。
3.del svn_info.txt 刪除svn_info.txt文件。

在編譯時將會生成svn_version.dll,須要將該文件添加到項目中,以便能同時發佈。這裏取名爲svn_version.dll,能夠找成其餘的名字和後綴名。

這樣在項目啓動時,能夠經過讀取svn_version.dll中的內容來獲取SVN版本號。

 

  1.  
    String version = "1.1.1"
  2.  
    String serverPhysicalPath = Server.MapPath(".");//WEB上,須要將服務路徑轉換成本地路徑。若是是WinForm程序,能夠獲取程序路徑。
  3.  
    if (!serverPhysicalPath.EndsWith("\\"))
  4.  
    {
  5.  
    serverPhysicalPath += "\\";
  6.  
    }
  7.  
    String svnVersionPath = serverPhysicalPath + "svn_version.dll";
  8.  
    StreamReader svnSteamReader = new StreamReader(svnVersionPath);
  9.  
    String line = svnSteamReader.ReadLine();
  10.  
    if (!String.IsNullOrWhiteSpace(line))
  11.  
    {
  12.  
    String[] temps = line.Split(':');
  13.  
    if (temps.Length > 1)
  14.  
    {
  15.  
    version += String.Format(".{0}", temps[1]);
  16.  
    }
  17.  
    }
  18.  
    return version;
以上是將SVN信息存成文件後,再讀取來實現的。也能夠考慮直接將SVN的版本信息寫到AssemblyInfo.cs中,而後再獲取。

 

出處:https://blog.csdn.net/xxdddail/article/details/38433759

=========================================================================

在實際項目中(特別是做爲產品的項目),版本號是必不可少的一部分。版本號的規則也有許多種,在此不討論具體的編碼規範。對於迭代的產品,版本繁多,特別是有多個實施項目所使用產品的版本不一樣(基於定製需求)時,清楚的標識組件與代碼的對應關係十分重要。

本文主要說明如何在 .Net 項目使用 SVN 做爲版本控制工具時生成與代碼對應的組件版本號。

咱們知道,SVN 在 commit 時會生成一串數字做爲序號,因此基本思路是把這個序號做爲 . Net 項目編譯後生成dll的文件版本號的最後一段。下面所列方法須要使用到TortoiseSVN 提供的 SubWCRev.exe 

首先,咱們須要經過註冊表查找 TortoiseSVN 的安裝目錄。

複製代碼
1 Rem Search TSVN Path
2 For /f "tokens=*" %%i In ('Reg Query HKLM\Software\TortoiseSVN /v Directory') Do (
3   ECHO %%i | Find "Directory">NUL
4   IF %ERRORLEVEL% == 0 (For /f "tokens=1,2,*" %%j In ("%%i") Do (SET TSVN_PATH=%%1))
5 )
6 SET TSVN_PATH=%TSVN_PATH%bin\SubWCRev.exe
複製代碼

SubWCRev 是經過替換文件中指定的關鍵字來實現得到 commit 序號的,點擊查看詳細的列表。 

而後咱們創建以一個 AssemblyInfo.tpl 做爲替換使用的模板,因爲 AssemblyInfo.cs 中除了固定的值外還有相似 GUID 變化的值,因此咱們不能所有替換,所以僅將須要修改的部分放在 tpl 中,內容以下:

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.$WCREV$")]

 接下來使用批處理替換原來的 AssemblyInfo.cs 文件,爲了在每次編譯時都自動替換,咱們把調用批處理的命令寫在項目生成事件的生成前事件中,例以下面這樣:

"(TargetDir)BeforeBuildProject.bat""(TargetDir)BeforeBuildProject.bat"" (ProjectDir)" "$(TargetDir)AssemblyInfo.tpl" .\Properties\AssemblyInfo.cs

$(TargetDir)表示編譯輸出目錄,更多可用全局變量請在生成事件中點擊「宏」查看。

 替換 AssemblyInfo.cs 的批處理代碼:

複製代碼
 1 SET WorkDir=%1
 2 SET Template=%2
 3 SET target=%3
 4 SET AssemblyInfo=ASSEMBLY_INFO.tmp
 5 
 6 PushD %WorkDir%
 7 SET WorkDir=.\
 8 
 9 Rem Generate a template file
10 FindStr /v "AssemblyVersion AssemblyFileVersion" %target% > %AssemblyInfo%
11 FindStr ".*" %Template% >> %AssemblyInfo%
12 
13 Rem Using TSVN Replace Tlp
14 "%TSVN_PATH%" %WorkDir% %AssemblyInfo% %target%>NUL
複製代碼

 固然這樣還不是一勞永逸,你會發現每次編譯 AssemblyInfo.cs 文件都會變化,所以你的 commit 序號也會一直跟着增長,這並非咱們所想要的效果。這裏提出一種解決方案,在每次替換後生成 dll 後又將 AssemblyInfo.cs 還原回去。

爲此,咱們在生成前事件中增長備份命令:

COPY /y "%target%" "%target%.bak">NUL

而後增長生成後事件,調用命令爲:

"(TargetDir)AfterBuildProject.bat""(TargetDir)AfterBuildProject.bat"" (ProjectDir)Properties\AssemblyInfo.cs"

 在 AfterBuildProject.bat 中咱們須要完成還原  AssemblyInfo.cs 和刪除備份文件的工做,代碼以下:

1 SET target=%1
2 COPY "%target%.bak" %target%
3 DEL /Q "%target%.bak" 2>NUL

就此,每次編譯時,系統都會自動將 commit 序號放到 dll 的文件版本中了。

完整代碼下載:點擊下載

 

本文來自 NewIdea 的博客,做者 Carey Tzou 。

原文地址:http://www.cnblogs.com/NewIdea/p/AutoVersion.html

轉載請註明出處,不然拒絕轉載!

 

=========================================================================

1、複製版本號文件 AssemblyInfo.cs

2、把複製後的文件更名爲 AssemblyInfo.templet.cs 
修改內容: [assembly: AssemblyVersion("1.0.0.$WCREV$")]

3、工程右鍵->屬性->生成事件->預生成事件命令行 輸入如下代碼:
"C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" $(ProjectDir) $(ProjectDir)Properties\AssemblyInfo.templet.cs $(ProjectDir)Properties\AssemblyInfo.cs -f

 

出處:https://www.cnblogs.com/zouhao/p/3446951.html

=========================================================================

根據上面文章的參考,咱們能夠根據任何邏輯生成版本號了,在程序編譯以前,也就是在VS程序的生成事件中,在編譯以前把版本邏輯的信息寫到AssemblyInfo文件,而後再編譯,其實也就是分兩步:

1)調用外部命令(能夠是bat或者exe等),生成版本號。

2)把版本號更新到AssemblyInfo文件中

那麼你能夠根據任何規則生成版本號了。

相關文章
相關標籤/搜索