[.NET] 組件安裝與配置 / Assembly Install and Configuration

  • 25531
  • 0
  • .NET
  • 2021-06-28

[.NET] 組件安裝與配置 / Assembly Install and Configuration

1.組件(Assembly),是一種可移動的執行檔,副檔名為exe或dll。

2.組件分為私有組件與共享組件

  2-1.私有組件:

       2-1-1.不具有強式名稱(Strong Name)

       2-1-2.只能擺在與應用程式同一層的目錄底下。

  2-2.共享組件:

       2-2-1.具強式名稱(Strong Name)

       2-2-2.可放在本機或遠端電腦(網際網路),或GAC資料夾(C:\WINDOWS\assembly)。

3.GAC全名是Global Assembly Cache,全域組件快取。

4.利用應用程式組態檔配置,當引用的組件若版本更新(或是要應用指定程式要執行的組件版本),我們可以不需再重新編譯程式(Compiler)。(Note:但必須要組件遵守參數傳遞原則,否則程式還是一樣會出錯)。請參考[C#.NET][VB.NET] 何謂 應用程式 組態設定 Application Configurable

 

本文章節:

如何建立私有組件

如何建立全域組件

如何使用 Microsoft .NET Framework 2.0 組態 工具

如何使用不同版本的組件

如何變更組件位置

如何設定開發階段共享組件

 


 

如何建立私有組件

1.建立一個新的Windows Form 應用程式→建立一個專案(CS_PrivateAssembly)→再加入一個類別庫專案(myClassLibrary)→撰寫類別庫內容。

2.將myClassLibrary加入參考

快照-200941517447

3.開始撰寫Windows Form 應用程式,完成後建置方案

private void Form1_Load(object sender, EventArgs e)
{ 
	//引用類別
	myClassLibrary.myClass myc = new myClassLibrary.myClass();
	label1.Text = myc.myVersion();
}
快照-200941516308

 

 

4.建置方案,便會在 ".\CS_AssemblyInstall\CS_PrivateAssembly\CS_PrivateAssembly\bin\Debug\bin\” 產生以下內容。

產生的內容如下

快照-200941517940

 

5.在".\CS_AssemblyInstall\CS_PrivateAssembly\CS_PrivateAssembly\bin\Debug\bin\”資料夾中將CS_PrivateAssembly.exe與myClassLibrary.dll複製到5-1~5-4的資料夾;並依以下四種測試方式,得知兩者的關係。

   5-1.在同一目錄下,驗証程式是否可正確執行。

   5-2.刪除myClassLibrary.dll,驗証程式是否可正確執行。

   5-3.建立子目錄(bin)後將myClassLibrary.dll移至子目錄(bin),驗証程式是否可正確執行。

   5-4.依下列敘述設定,建立子目錄(bin)後將myClassLibrary.dll移至子目錄(bin),驗証程式是否可正確執行。

以下為執行失敗的畫面

快照-2009415173257

 

6.當你上述步驟5-3測試完畢之後,應該是會出現錯誤訊息,下列說明如何設定組態檔;專案按右鍵→加入→新增項目→建立應用程式組態檔→輸入以下內容→建置方案。

快照-2009415171926
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="bin"/>
    </assemblyBinding>
  </runtime>
</configuration>

privatePath屬性,可以指定多個資料夾,用分號區隔開,但資料夾位置只能在應用程式的子路徑下。相關組態設定請參考.NET Framework 的組態檔結構描述

例:<probing privatePath="bin;bin2\subbin;bin3"/>

 

 

如何建立全域組件

1.建立一個新的Windows Form 應用程式→建立一個專案(CS_PrivateAssembly)→再加入一個類別庫專案(myClassLibrary)→撰寫類別庫內容。

2.開啟類別庫專案(myClassLibrary)屬性→簽署→新增強式名稱。

快照-2009416521

新增key

快照-20094165226

輸入名稱

快照-20094165237

完成後會多一把鑰匙

快照-20094165240

3.將myClassLibrary加入參考

4.開始撰寫Windows Form 應用程式,完成後建置方案

5.建置方案後,便會在".\CS_AssemblyInstall\CS_PrivateAssembly\CS_PrivateAssembly\bin\Debug\bin\”產生以下內容。

快照-200941651938

 

6.將CS_PrivateAssembly.exe與myClassLibrary.dll複製到6-1~6-6資料夾,並以下幾種測試方式,得知兩者的關係。

   6-1.在同一目錄下,驗証程式是否可正確執行。

   6-2.刪除myClassLibrary.dll,驗証程式是否可正確執行。

   6-3.建立子目錄(bin)後將myClassLibrary.dll移至子目錄(bin),驗証程式是否可正確執行。

   6-4.用拖曳方式將myClassLibrary.dll移至目錄(C:\WINDOWS\assembly)底下,並刪除6-4資料夾的myClassLibrary.dll,驗証程式是否可正確執行。(完成後再將C:\WINDOWS\assembly底下的myClassLibrary刪除)

 

   6-5.將myClassLibrary.dll版本內容修改(或修改組件資訊),驗証程式是否可正確執行。(參考如何使用Microsoft .NET Framework 2.0組態工具)

   6-6.將myClassLibrary.dll移至任何目錄,例如(C:\Test,或是網路位置),驗証程式是否可正確執行。(參考如何使用Microsoft .NET Framework 2.0組態工具)

 

如何使用 Microsoft .NET Framework 2.0 組態 工具

1.控制台→系統管理工具→Microsoft .NET Framework 2.0 組態 工具 (若在無該工具請詳閱手動安裝.NET 2.0組態設定工具)

2.應用程式→加入要設定的應用程式→其它→加入應用組程式。

快照-200941675154

 

3.在左邊視窗,已設定的組件→在右邊的視窗,按右鍵→加入→選擇myClassLibrary.dll組件。

快照-200941675659

 

快照-200941675841
快照-20094168019

 

4.這時".\CS_AssemblyInstall\CS_PrivateAssembly\CS_PrivateAssembly\bin\Debug\bin\”目錄底下已經自動產生了CS_PublicAssembly.exe.config檔案,可以將它加入專案以便管理。

快照-20094168936

 

如何使用不同版本的組件

1.myClassLibrary專案屬性→應用程式→組件資訊→更改版本資訊,由1.0.0.0改為1.0.0.1→建置方案。

快照-200941691022

2.此步驟將要執行6-5測試,先建立6-5資料夾,將6-4資料夾的CS_PublicAssembly.exe複製至6-5,再將myClassLibrary.dll (版本1.0.0.1)複製至6-5驗証程式是否會執行。如果你會成功表示你設錯了

快照-20094169917

3.執行Microsoft .NET Framework 2.0 組態(左邊視窗)→應用程式→CS_PublicAssembly→已設定的組件→檢視已設定的清單→設定CS_PublicAssembly的繫結原則→依開發者的版本修改下圖內容→將".\CS_AssemblyInstall\CS_PrivateAssembly\CS_PrivateAssembly\bin\Debug\bin\”資料夾中的CS_PublicAssembly.exe.config,複製至6-5驗証程式是否會執行。如果你會失敗表示你設錯了

快照-200941692453

 

快照-200941693625

 

如何變更組件位置

1.執行Microsoft .NET Framework 2.0 組態→修改底層機碼→修改內容如下↓

快照-2009416101914

2.執行Microsoft .NET Framework 2.0 組態→修改底層機碼→修改內容如下→將 ".\CS_AssemblyInstall\CS_PrivateAssembly\CS_PrivateAssembly\bin\Debug\bin\”資料夾中的CS_PublicAssembly.exe.config與6-5的CS_PublicAssembly.exe複製至6-6,然後將myClassLibrary.dll複製至C:\test\底下然後驗証程式是否會執行。如果你會失敗表示你設錯了

 

範例下載:

VB_AssemblyInstall.rar

CS_AssemblyInstall.rar

 

如何設定開發階段共享組件

在開發階段我們可以使用DEVPATH來取代GAC

1.在應用程式的組態檔,將developmentMode設為true

<?xml version="1.0"?>
<configuration>
  <runtime>
    <developmentMode developerInstallation="true"/>
  </runtime>
</configuration>

 

2.設定Windows環境變數DEVPATH,輸入輸出組件路徑即可。

快照-200941614306
快照-2009416143017

文章出自:http://www.dotblogs.com.tw/yc421206/archive/2009/04/16/8030.aspx

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo