線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1599
推到 Plurk!
推到 Facebook!

.NET component元件的版本控制

 
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-09 20:14:17 IP:218.175.xxx.xxx 未訂閱
.NET component元件的版本控制 http://blog.sina.com.tw/archive.php?blog_id=4907&md=entry&id=3345    .NET元件科技所提供的元件依其存放地點與使用方式,分為兩種private components和shared components...    --------------------------------------------------------------------------------    一個元件科技必須提供某種「版本控制」的支援,以便使用者能夠有一個決定性的方式與伺服器元件互動。你所面對的元件版本挑戰會和你所選擇的元件分享模式有很密切的關係。Private components(元件存在於應用程式使用它們的有地點)很少遭受版本控制議題,因為每個應用程式會Bundle它自己私有的元件,你必須明確地介入干擾它才會導致不相容;相反地Shared components會引起許多令人頭痛的版本控制問題,因為它們儲放在Globally Known的地點,且會被許多的應用程式所使用。但是一個成熟的元件科技必須允許多重的應用程式來分享取用伺服器元件,過去將DLLs放在global地點,如system目錄最後被證明是失敗的,最後導致邪惡的結果:不是令人窒息的創新就是DLL Hell,一點都不令人驚訝,.NET平台的最主要目標之一是簡化元件的部署與版本控制。    組件版本號碼(Assembly version number) 每個.NET assembly都有一個版本號碼,這個版本號碼會作用在這個assembly中的所有components(DLLs),通常會用AssemblyVersion屬性來為assembly指定版本號碼,當然你也可以在連結時,使用命令工具和參數來指定版本號碼。如果你使用的是VS.NET來產生組件,VS.NET會產生一個包含組件AssemblyVersion屬性的AssemblyInfo檔案,舉例來說AssemblyVersion看起來會像這樣子:    [assembly: AssemblyVersion(“1.2.3.4”)]    這個版本號碼會被記錄在伺服器組件清單中,當client端開發者參加入了一個伺服器組件參考,client端組件會在它自己組件清單中記錄伺服器組件名稱和明確版本,假設如果client端使用版本1.2.3.4的MyAssembly組件中MyClass類別,client端的組件清單會記錄運作時所需的MyAssembly組件版本1.2.3.4,並且會包含如下宣告: .assembly extern MyAssembly { .ver 1:2:3:4 } 在執行時,.NET會解析所需組件所在位置,並且保證client端能夠得到一個相容的組件,如果找不到相容組件時,例外狀況就會發生,問題是相容組件是由什麼所構成的呢?相容的規則很直覺的:一個相容組件必須包含client端組件清單所需求的版本號碼。    版本號號組成要素(Version Number Elements) 版本號碼由四個數字部分所組成:主要版本號碼、次要版本號碼、建置版本號碼和修正版本號碼(major version number,minor version number,build number,revision number)。如:    [assembly: AssemblyVersion(“2.1.1524.3”)]    主要版本號碼為2 次要版本號碼為1 建置版本號碼為1524 修正版本號碼為3    雖然你可以以任何語意法指派這些數字,但是你還是需要遵守一個準則或常規,也就是必須將版本變動的意義傳達給元件的使用者(consumers)知道,一個較大的bulid number表示為同一個相容組件的較新版本,而較大的revision number表示某些次要的改變(也許是某些較次要的bug修正),或者是由於當地化(localization)所作的改變,就一個產品發佈程序的一部分而言,你必須確認已經增加適當的版本號碼部分,以反應出較新版本的本質。    提供版本號碼(Providing Version Number) 你可以明確地提供版本號碼或者由VS.NET自動產生版本號碼,你永遠必須提供主要版本號碼,任何沒有被提供的部分將會被帶0,舉例來說,如果組件沒有包含一個AssemblyVersion屬性,編譯器將會指定它的版本號碼為0.0.0.0。 1.如果你提供了這樣一個組件屬性:[assembly: AssemblyVersion(“1”)],編譯器將會產生1.0.0.0的版本號碼。 2.如果你提供了這樣一個組件屬性:[assembly: AssemblyVersion(“1.2”)],編譯器將會產生1.2.0.0的版本號碼。 3.然而,如果你提供了這樣一個組件屬性:[assembly: AssemblyVersion(“1.2.*”)],編譯器將會自動產生build和revision的版本號碼。 對於build number,編譯器使用當地時間自2000/01/01日到現在的天數,對於revision number則使用當地時間自午夜除以二。以上一個例子而言,編譯器可能會產生像這樣子的版本號碼: 1.2.1078.16200 如果你有其他產生build number的網要(schema),你可以使用它,且選擇將revision number遮罩掉(mask out),如[assembly: AssemblyVersion(“1.2.3.*”)],編譯器會只產revision number 。 一般而這,最實際的方式是提供明確的major number、minor number,其他build number和revision number則交由編譯器來產生,如AssemblyVersion(“1.2.*”)] 。 因為明確地給予major及minor number並結合遮罩掉(mask out) build number、revision number,這是VS.NET預設使用的網要(schema)當你在開啓一個新專案的時候,VS.NET會指派這樣的一個[assembly: AssemblyVersion(“1.0.*”)]值到AssemblyInfo.cs檔裡。     如果是我的話,我一定會問:不過就一個版本編號,我幹嘛知道那麼清楚?一般寫ASP.NET又用不到!其實最終目的是要把你寫的類別程式封裝成.NET Assembly元件,將元件Component部署到Server上去,成為shared component,而要部署成shared component你必須知道什麼是版本號碼,元件必須靠version number來作識別,其道理在這!否則你不懂版本控制,又如何正確的部署component?!又如何能用到component的優點與好處!
系統時間:2024-05-18 0:55:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!