如何共享自己的程序集.(原創)

以前自己編寫C#類別檔生成dll通用文件的時候總是要每個專案都要引用這個公用檔,這樣做有很多缺陷,比如公用程式檔更新時候要把所有的專案都要拿新的來取代它.這樣很不方便.所以下面介紹如何把程序集安裝到全局程序集.

首先要知道.NET支持的程序集:弱命名(Weakly named assembly)與強命名(Strongly named assembly),強命名程序集有一個發布者的公鑰/私鑰對簽名,其中公鑰/私鑰對唯一標識程式的發布者.強命名集包含四個唯一標識程式集的特性:文件名(無擴展名),版本號,語言文化標識與公鑰標識.

其次要知道用到強命名的工具.Strong Name Utility,SN.exe這個東東是與Visual Studio一起發布的,在安裝目錄打開命令行.注意可不是cmd進入的.要是以cmd進入則找不到sn的命令.命令:sn -k myProject.snk 產生這個文件將包含一對二進制格式的公鑰與私鑰.怎樣查看公鑰呢?很簡單,只有兩個命令:sn -p myProject.snk myProject.publickey,sn -tp myProject.publickey.

然後要知道Assembly部署的方式:私有部署與全局部署.私有的就放在bin目錄下,弱命名只能私有部署.我們現在這裡要實現的是全局部署.它是將Assembly部署在一些CLR知道的地方.強命名即可以私有部署,也可以全局部署.

最後還是實作一次.如果我建立一個類別庫(myProject),首先生成snk文件,sn -k myProject.snk,把這個文件的詳細路徑放置在myProject的AssemblyInfo.cs的[assembly: AssemblyKeyFile("路徑+myProject.snk")],然後Ctrl+Alt+B編譯一次,然後打開C:\WINDOWS\assembly,把生成的dll拖進這個目錄產生,也可以用gacutil產生,這個不詳述.產生以後就相當於引用myProject.dll時CLR會自動找到這個文件,並能更新這個dll.為了讓Visual Studio選項卡列表中出現myProject.dll可以在註冊表中的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders新增機碼,然後把myProject.dll所在的目錄寫入預設值,然後重啟Visual Studio,就可以找到了.注意最好在引入dll屬性中的複製本機設置成False.
        替換版本的xml.

<runtime>
      
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       
<dependentAssembly>
         
<assemblyIdentity name="WebTest"
                           publicKeyToken
="7810908ece6459ac"
                           culture
="neutral" />
         
<bindingRedirect oldVersion="2.0.0.26968"
                          newVersion
="2.2.0.23003"/>
       
</dependentAssembly>
       
<publisherPolicy apply="no" />
      
</assemblyBinding>
   
</runtime>
   
</configuration>


 

posted @ 2007-04-18 10:31  芙蓉客  阅读(333)  评论(0)    收藏  举报