$在開發項目時,需要知道當前發布的到底是哪個版本,比較好的方式就是獲取SVN的版本來作為項目的版本。項目版本一般由主版本、次版本、內部版本、修改版本四個部分組成,我們獲取的SVN版本就作為修改版本即可。這里需要利用SVN的SubWCRev.exe來實現,一般安裝了SVN后都會有的。SubWCRev.exe獲取SVN版本並依據模板文件,更新到相應的目標文件中。下面是具體的步驟。
1.將項目中Properties中的AssemblyInfo.cs文件復制一份,命名為AssemblyInfo.template.cs,同時將該文件的編譯屬性設置為無。設置為無是為了不讓該文件不參與編譯。
同時將[assembly: AssemblyVersion("1.0.0.538")]和[assembly: AssemblyFileVersion("1.0.0.538")]修改為[assembly: AssemblyVersion("1.0.0.$WCREV$")]和[assembly: AssemblyFileVersion("1.0.0.$WCREV$")],如下圖
其中$WCREV$是SubWCRev.exe用來匹配然后替換成最新版本號的,必須要這個名字。
2.在項目屬性的生成事件中,添加預先生成事件命令,命令內容為SubWCRev $(SolutionDir) $(ProjectDir)Properties\AssemblyInfo.template.cs $(ProjectDir)Properties\AssemblyInfo.cs,如下圖
3.編譯生成后,可以看到AssemblyInfo.cs中的版本號已經變了,如下圖
4.代碼中取得該版本號並顯示,代碼如下
this.Text += String.Format("({0})", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString());
結果如下圖所示
轉載請注明出處
出處:https://blog.csdn.net/xxdddail/article/details/49280375
=========================================================================
VS中的Properties下的AssemblyInfo.cs可以設置相應的版本號。下面是AssemblyInfo.cs設置版本的方式。
-
[assembly: AssemblyVersion("1.0.0.0")]
-
[assembly: AssemblyFileVersion("1.0.0.0")]
預生成事件命令行中輸入相應的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版本號。
-
String version = "1.1.1"
-
String serverPhysicalPath = Server.MapPath(".");//WEB上,需要將服務路徑轉換成本地路徑。如果是WinForm程序,可以獲取程序路徑。
-
if (!serverPhysicalPath.EndsWith("\\"))
-
{
-
serverPhysicalPath += "\\";
-
}
-
String svnVersionPath = serverPhysicalPath + "svn_version.dll";
-
StreamReader svnSteamReader = new StreamReader(svnVersionPath);
-
String line = svnSteamReader.ReadLine();
-
if (!String.IsNullOrWhiteSpace(line))
-
{
-
String[] temps = line.Split(':');
-
if (temps.Length > 1)
-
{
-
version += String.Format(".{0}", temps[1]);
-
}
-
}
-
return version;
出處: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文件中
那么你可以根據任何規則生成版本號了。