[.NET]要將Policy組件(發行者原則組件)拉進GAC,卻發生「The assembly must have a strong name」的錯誤!

要將Policy組件(發行者原則組件)拉進GAC,卻發生「The assembly must have a strong name」的錯誤!

最近同事問說,他要將公司的Policy組件拉進GAC之中,卻發生以下的錯誤訊息,

Unable to add the selected assembly.  The assembly must have a strong name (name, version and public key).

image

 

於是請同事檢查看看,Policy組件目錄中,是否有 發行者原則檔(configuration file) 呢?

查了一下,原來是因為 發行者原則檔(configuration file) 不在所以會有這樣的錯誤訊息!

image

 

那Policy組件要如何知道說,它需要那一個 發行者原則檔(Config file) 呢?

假設我以下面的Command來建立一個Policy組件,

al.exe /link:"C:\NBase20\NBase20.config" /out:"C:\NBase20\policy.2.0.GSS.Stirrup.NBase20.dll" /keyfile:"C:\NBase20\NBase20.snk" /version:"2.0.3500.9"

image

PS.我的al.exe的Path是在 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 之中!

 

我們可以透過反組譯程式來看 policy.2.0.GSS.Stirrup.NBase20.dll 的Resource中就會有一個 NBase20.config ,如下,

image

 

所以在將 policy.2.0.GSS.Stirrup.NBase20.dll 拉進 GAC 時,就會去找 NBase20.config ,然後將 發行者原則檔(Config file) 一併Copy到GAC之中。

可以參考「讓GAC目錄看起來跟一般的檔案總管一樣」看看在Policy組件在GAC之中,是否也有 發行者原則檔(Config file) ,如下,

因為透過al.exe建立時,沒有指定平台,所以預設是anycpu,所以Search的Path是從 C:\Windows\assembly\GAC_MSIL 開始

image

 

MSDN上的說明還蠻詳細的,建議可以看一下「如何:建立發行者原則」哦!

 

參考資料

讓GAC目錄看起來跟一般的檔案總管一樣

如何:建立發行者原則

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^