要將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).
於是請同事檢查看看,Policy組件目錄中,是否有 發行者原則檔(configuration file) 呢?
查了一下,原來是因為 發行者原則檔(configuration file) 不在所以會有這樣的錯誤訊息!
那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"
PS.我的al.exe的Path是在 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 之中!
我們可以透過反組譯程式來看 policy.2.0.GSS.Stirrup.NBase20.dll 的Resource中就會有一個 NBase20.config ,如下,
所以在將 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 開始
MSDN上的說明還蠻詳細的,建議可以看一下「如何:建立發行者原則」哦!
參考資料
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^