古詩詞大全網 - 藝術簽名 - 。Net:什麽是強組裝,什麽是弱組裝?

。Net:什麽是強組裝,什麽是弱組裝?

您可以為程序集分配壹個稱為強名稱的加密簽名,它為程序集提供壹個唯壹的名稱,並防止其他人借用您的程序集名稱(名稱欺騙)。如果您部署的程序集將由同壹臺計算機上的多個應用程序共享,則該程序集必須具有強名稱。即使您只在應用程序中使用程序集,使用強名稱也可以確保加載程序集的正確版本。

生成具有強名稱的程序集的第壹步是獲取加密密鑰對。的。NET framework SDK包括壹個“強名稱”工具(Sn.exe ),可用於生成密鑰對。強名稱工具生成的密鑰對可以保存在文件中,也可以存儲在本地計算機的加密服務提供程序(CSP)中。以下命令使用強名稱工具生成新的密鑰對,並將其存儲在名為TestKey.snk的文件中:

sn -k Testkey.snk

獲得密鑰對後,您需要將正確的自定義屬性添加到源文件中,以便編譯器可以發出具有強名稱的程序集。根據用於簽名的密鑰對是包含在文件中還是包含在CSP的密鑰容器中,正確選擇屬性。對於存儲在文件中的密鑰,使用系統。對於存儲在CSP中的密鑰,請使用system。reflection . assemblykeynameattribute . NET組件和com組件之間的互操作

的。NET技術是微軟推出的下壹代平臺技術。自從的Beta2版本正式發布以來。NET技術架構,這種技術已經逐漸成熟和穩定。根據微軟平臺系統的市場份額,我們很容易想象。NET技術將在未來壹兩年內登上主流技術平臺,而壹個新技術平臺要想快速發展,最重要的前提是不會完全拋棄之前的技術,這裏指的是COM/COM+技術。NET技術。

壹般來說,在IT技術和硬件行業領域,技術更新換代的速度是驚人的,約定俗成的是所有的新技術都會遵循向後兼容的原則,但是。NET技術不僅做到了這壹點,它甚至實現了各自的調用,這是非常難能可貴的。也就是說,我們不僅可以在。NET組件,但是我們也可以調用。NET組件通常位於COM組件中。這樣做的好處是顯而易見的。壹方面可以保留現有的技術資源;另壹方面,我們可以利用各種新技術帶來的。NET中的現有資源。

在我們開始之前,讓我們看壹下。NET組件和我們目前經常使用的COM組件。

NET組件可以分為兩類:* *共享。NET組件和私有。凈成分。

的。* * *享受的. NET組件需要通過標準的公鑰密碼技術保證其唯壹性,類似於COM的全球唯壹ID號GUID。但是,我們應該盡量避免使用。NET組件* * *盡可能的享受,因為在Windows系統下將有可能陷入困擾開發者很久的“DLL地獄”。

私人的。NET組件是。NET組件模式,我們將經常使用。這樣,我們在發布時需要做的就是。NET組件只是簡單地復制它們。我們仿佛回到了古代的DOS時代,現在不用再關心復雜的系統註冊表,也不用擔心DLL的版本被覆蓋。

COM組件是微軟力推多年的代碼復用技術框架,這些年也得到了很大的發展和應用,但缺點也日益明顯。我們要面對眾多COM組件之間的版本控制和可怕的DLL地獄,還有註冊表,GUID等等。我們在安裝壹個軟件的時候,也把大量各種版本未知的COM組件帶入了我們的操作系統。

但是COM組件的技術優勢也是顯而易見的,Windows平臺下的代碼重用已經在很大程度上實現了,所以我們就提出了這樣壹個課題,如何隨著的成熟,保護和利用大量現有的使用COM技術的軟件和產品。NET技術?

下面我們來討論壹下如何實現會議之間的通話和操作。NET組件和COM組件。

首先,讓我們看看如何調用編寫的組件。NET中現有的COM組件:

這裏我們用C#寫壹個最簡單的組件,只返回壹個字符串。詳細代碼如下:

在上面。NET組件,我們實現了壹個類成員:say。他的目的只是返回壹個字符串。

切換到MS-DOS命令行並運行:

c:\ & gt;CSC/t:library/out class library 1。DLLClassLibrary1.cs

上面的編譯器參數/t:library告訴C#編譯器,我們現在正在構建壹個庫應用程序。這樣我們就得到壹個名為ClassLibrary1.DLL的. NET組件。

但是如果我們想在現有的COM組件中使用這個組件,我們還有以下步驟:

切換到MS-DOS命令行並運行:

c:\ & gt;regasm out類庫1。DLL/regfile:class library 1 . reg

上面的命令行是為了註冊我們的。NET組件並生成備份註冊表文件。您應該記得,在我們以前的win9x/NT/2000下,用於註冊COM組件的命令是:

regsvr32 c:\test.dll

在下面。NET,正在註冊。NET組件需要上述regasm命令。值得註意的是,這個方法只供COM組件調用,而。NET本身不需要任何註冊就可以互相調用組件!

還沒完呢。接下來我們需要:

切換到MS-DOS命令行並運行:

c:\ & gt;tlbExp class library 1 . dll/out:class library 1 . TLB

上面的命令行指示。NET組件,以便我們提前綁定COM組件。

好的,那麽我們可以很容易地使用。NET組件,是基於當前的COM技術,用我們自己的代碼用C#寫的。這裏我們用VB6.0寫壹個小的測試代碼。在開始之前,我們需要在VB的集成環境中使用菜單中的“引用”選項,選擇我們剛剛生成的類型庫文件ClassLibrary1.tlb。

VB測試的代碼如下:

私有子窗體_Load()

Dim測試作為新類庫1.hello

Dim字符串作為字符串

str = test.say("dddd ")

MsgBox字符串

末端接頭

接下來,讓我們看看如何使用現有的COM組件。凈成分。

因為。NET,更容易使用COM組件。設計之初,。NET考慮的是如何方便的利用現有的技術資源,這也是微軟的壹貫風格,也是。網也可以看到。。NET提供了大量的類庫來方便與COM的互操作,其中最重要的壹個命名空間就是:System.Runtime.InteropServices,通過這個命名空間的名字,我們也可以從字面上看出“互操作服務”。命名空間系統。InteropServices提供了壹系列對COM對象進行操作的類。

在下面的例子中,讓我們調用系統自帶的Win32函數MessageBoxA。該功能位於user32.dll,是系統的壹個com組件。我們調用的代碼如下:

使用系統;

使用系統。Runtime . InteropServices

分類試驗

{

[DllImport("user32.dll")]

public static extern int messagebox a(in thnd,string strMsg,string strCaption,intn type);

公共靜態void Main()

{

int myMsg

myMsg=MessageBoxA(0,"妳好!",“測試”,0);

}

}

切換到MS-DOS命令行並運行:

c:\ & gt;csc測試. cs

編譯完我們的C#應用程序,直接運行就可以看到對話框了!

需要註意的是,在調用COM組件之前,我們需要參考命名空間:System。控件中的。NET程序。因為我們需要使用這個命名空間提供的壹個方法:DllImport。

反正在中使用COM組件非常方便。網。以上是我們調用的系統的DLL組件。同樣,我們也可以用這個方法調用自己用VB/VC編寫的COM組件。

我們已經討論完了如何在?NET和COM,我們已經清楚地看到了。NET技術。我們越早掌握。NET技術,將來就越容易占據領先地位。讓我們壹起努力掌握強大的。NET平臺技術。

(以上程序在Windows2000 server+VS.NET Beta2下測試通過)。