[.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
本文章節:
如何建立私有組件
1.建立一個新的Windows Form 應用程式→建立一個專案(CS_PrivateAssembly)→再加入一個類別庫專案(myClassLibrary)→撰寫類別庫內容。
2.將myClassLibrary加入參考
3.開始撰寫Windows Form 應用程式,完成後建置方案
private void Form1_Load(object sender, EventArgs e)
{
//引用類別
myClassLibrary.myClass myc = new myClassLibrary.myClass();
label1.Text = myc.myVersion();
}
4.建置方案,便會在 ".\CS_AssemblyInstall\CS_PrivateAssembly\CS_PrivateAssembly\bin\Debug\bin\” 產生以下內容。
產生的內容如下
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),驗証程式是否可正確執行。
以下為執行失敗的畫面
6.當你上述步驟5-3測試完畢之後,應該是會出現錯誤訊息,下列說明如何設定組態檔;專案按右鍵→加入→新增項目→建立應用程式組態檔→輸入以下內容→建置方案。
<?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)屬性→簽署→新增強式名稱。
新增key
輸入名稱
完成後會多一把鑰匙
3.將myClassLibrary加入參考
4.開始撰寫Windows Form 應用程式,完成後建置方案
5.建置方案後,便會在".\CS_AssemblyInstall\CS_PrivateAssembly\CS_PrivateAssembly\bin\Debug\bin\”產生以下內容。
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.應用程式→加入要設定的應用程式→其它→加入應用組程式。
3.在左邊視窗,已設定的組件→在右邊的視窗,按右鍵→加入→選擇myClassLibrary.dll組件。
4.這時".\CS_AssemblyInstall\CS_PrivateAssembly\CS_PrivateAssembly\bin\Debug\bin\”目錄底下已經自動產生了CS_PublicAssembly.exe.config檔案,可以將它加入專案以便管理。
如何使用不同版本的組件
1.myClassLibrary專案屬性→應用程式→組件資訊→更改版本資訊,由1.0.0.0改為1.0.0.1→建置方案。
2.此步驟將要執行6-5測試,先建立6-5資料夾,將6-4資料夾的CS_PublicAssembly.exe複製至6-5,再將myClassLibrary.dll (版本1.0.0.1)複製至6-5驗証程式是否會執行。如果你會成功表示你設錯了
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驗証程式是否會執行。如果你會失敗表示你設錯了
如何變更組件位置
1.執行Microsoft .NET Framework 2.0 組態→修改底層機碼→修改內容如下↓
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\底下然後驗証程式是否會執行。如果你會失敗表示你設錯了
範例下載:
如何設定開發階段共享組件
在開發階段我們可以使用DEVPATH來取代GAC
1.在應用程式的組態檔,將developmentMode設為true
<?xml version="1.0"?>
<configuration>
<runtime>
<developmentMode developerInstallation="true"/>
</runtime>
</configuration>
2.設定Windows環境變數DEVPATH,輸入輸出組件路徑即可。
文章出自:http://www.dotblogs.com.tw/yc421206/archive/2009/04/16/8030.aspx
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET