準備你的發布階段

發表于:2007-05-25來源:作者:點擊數: 標簽:你需要在階段發布你的
你需要在集合層設置幾個特性,這些特性將影響.NET中的集合的版本和 安全 方面。 By Brian Noyes 發布的早期準備 許多項目陷入麻煩的原因是因為對發布階段的計劃失敗了,包括版本、安全、和如何包裝和發布你的程序。你能避免陷入麻煩的辦法是看.NET Framework
你需要在集合層設置幾個特性,這些特性將影響.NET中的集合的版本和安全方面。
By Brian Noyes

發布的早期準備
許多項目陷入麻煩的原因是因為對發布階段的計劃失敗了,包括版本、安全、和如何包裝和發布你的程序。你能避免陷入麻煩的辦法是看.NET Framework SDK文檔中與發布集合相關的版本和安全的部分,然后使用發布項目幫助把你的產品整合起來。

你可以在集合層設置影響你的.NET集合中的版本和安全方面的幾個特性,當你在Visual Studio .NET中用項目向導建立一個項目時,向導根據語言增加AssemblyInfo.cs或者AssemblyInfo.vb到你的項目中。這個文件中是你想用來把適當的元數據放到你的集合的特性。如果你不想的話你就不必使用這些文件;你不需要定義這些文件中的每個特性;你可以把你想要的特性放在你的集合項目的任何代碼文件中。當你標記這些應用到集合中的特性時,用特性標簽里的“assembly:”前綴,你不需要在項目里的另一個模塊中聲明他們,你可以把他們放在任何你想放的地方。

你將想要設置一些特性來表示你的集合,包括名字、公司、描述、產品、版權和商標特性。而且,其它特性,AssemblyVersion、AssemblyKeyFile和 AssemblyKeyName特性,在運行時直接影響你的程序。

AssemblyVersion特性允許你建立主要的版本、次要的版本、修訂版本、和版本號。運行時使用這些項目來區分集合。這就允許相同集合的不同版本一起運行在公用集合緩存區(GAC)。如果在應用程序的本地目錄運行集合,集合的版本和關鍵特性將不會起作用。但是如果你想支持集合的多個版本,或者使他們可以被其它程序訪問,或者被分布在不同目錄上的程序訪問,你需要使用gacutil.exe工具把你的集合放到GAC。為了避免沖突和確保行為一致,正確的版本編制是非常重要的。

AssemblyKeyFile 和 AssemblyKeyName特性讓你指定基于加密的公共鍵來安排你的集合數位。你可以給你的集合賦一個強大的名字,這就意味著你不需要依賴信任關系來校驗簽名的來源?;蛘吣憧梢越o你的集合申請一個證明,用一個可信賴的來源加以校驗,來確認簽名的真實性。

在設計.NET程序之前你需要計劃所有的這些因素,特別是如果你的程序和其它應用程序交互或者給其它應用程序提供服務。如果你正確使用了這些性能,.NET版本和安全機制讓你用比Windows DLLs 或者 COM對象更豐富的方法來發布、維護和更新你的應用程序。

你也可以使用VS.NET IDE中一般項目向導為你的應用程序和服務創建發布項目(見javascript:openWindowRes('http://www.fawcette.com/china/DotNetMagazine/2001_12/GetReadyToDeploy/Figure1.asp');">圖1)。幾個不同的發布項目類型提供了建立選項的公共組合,這些選項你可以通過向導配置。一旦向導建立了項目,你可以通過修改項目屬性或者增加文件和安裝步驟來進一步定制安裝過程。你不需要象版本和安全方面一樣擔心項目發布,但是你至少調查現有的能力,考慮如何使用他們包裝和發布你的項目。

不同語言程序員的交互,管理語言信息量
.NET重要的市場方面之一是跨語言開發和調試支持。這種能力給你更多的機會來展現你在建立新類型的項目時的才智。例如,ASP網絡開發者有一個特定的方法來寫他們的代碼,使用某個類庫或者COM對象,這些代碼通常不同于C++VB COM組件開發者的代碼。使用ASP.NET,網絡程序員可以使用不同的語言做底層開發,并且能使用在非網絡程序中使用的編程方法做網絡開發。目前的網絡開發者可以在ASP.NET中使用面向對象編程,也可以使用在組件開發中使用的框架類庫。這也使得開發其它類型的應用也變得容易了。

然而,在大多數公司,跨語言開發的優勢是受限制的。一想到每個代碼模塊都是用不同的語言開發的,配置管理人員就會在深夜嚇出一身冷汗。你仍然需要在哪種類型的模塊應該用哪種語言方面保持連貫。你需要維持這種連貫性至少在應用程序子系統的范圍內。但是,每個政策可能是你偏離的起點,所以在開發中選擇不同語言的分類能力,是在.NET的世界里最重要的。

從執行中分離出接口
面向對象和基于組件開發的關鍵方針就是爭取接口部分和執行部分相分離。不管是使用C#,VB.NET,或者C++,你都可以在.NET的代碼層很容易的實現它。你用被選語言的適當關鍵字將接口定義為一個獨立的實體,比如說用C#中的接口關鍵字,然后用一個類實現接口。另外,你也需要考慮在不同的發布情況下,如何管理不同版本的接口。

如果你在包含組件的主類的集合中定義了接口。你就沒有辦法從組件版本(即實現)中分離出接口的版本。但是如果你在從這些接口的實現類分離出來的集合里,定義一個接口。這樣,你就可以使用.NET中的集合版本能力,以使你能夠得到特別接口上的正確版本,而不必擔心實現接口的組件的版本。

已經發布的接口應該是不可變的,所以把它放在一個獨立的集合中,這樣你使用版本號就可以清晰的顯示接口是否改變??蛻舳四軌虼_認它使用接口的特別版本,而不必擔心實現接口的組件的版本。一旦你建立了一個定義良好的接口,你很少需要為這個接口定義一個新的版本。改變底層執行部分是很平常的。采用這種分離集合的方法,使你自己可以得到更多的控制權,和讓你使用.NET的版本特征以幫你加強接口的版本整合。

使用值類型
在.NET,所有的東西是一個對象,都是來源于一個公共基類。這就變得相當靈活,給你許多好處,比如運行時類型檢查和類型轉換。但是.NET也能夠讓對象不會出現上述這些性能。這就是為什么有值類型。如果你有一個類,它放置基本類型的信息,你應該考慮在C#中把它聲明為struct,或者在VB.NET中把它聲明成structure。他們是值類型,和參考類型正好相對。他們仍然是對象,但是.NET運行時存儲值類型是在stack而不是heap,他們不會由于參考指針而浪費更多的內存。如果你正在管理簡單對象的大集合,或者需要一個遠程操作的輕量級版本,一定要考慮值類型。


關于作者:
Brian Noyes是Digital Access公司(www.digitalaccess.com)的軟件工程manager。他是一個具有十年多軟件系統工程經驗的MCSD開發人員。Brian著有.NET and COM: Working Together,你可以從 MightyWords, Inc. (www.mightywords.com)找到它。你可以通過bnoyes@domeworks.com來聯系他。

原文轉自:http://www.anti-gravitydesign.com

評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97