0

我有一個用C#編寫的windows服務。它動態生成C#代碼並將它們編譯爲程序集,例如abc.dll,xyz.dll等。這些程序集稍後會加載執行。編譯時,我傳遞/ keyfile:mykeyfile.snk「作爲System.CodeDom.Compiler.CompilerParameters類的編譯器選項之一。現在問題: 由於強名稱驗證失敗,因此某些組合程序無法加載。我從測試系統得到了生成的程序集,當我用sn,exe檢查它們時,我發現大約有六分之一的程序集是延遲或測試簽名。運行sn.exe -v xyz.dll給我 xyz.dll是一個延遲簽名或測試簽名的程序集。很顯然,這將無法加載。CompileAssemblyFromSource測試簽名程序集

爲什麼有些組件不正確簽名?

+0

不確定它可以幫助,但你嘗試記錄編譯器輸出?也許有一些問題的國王。 –

回答

0

我能解決這個問題,我共享爲了每個人的利益。問題的原因是編譯是一個兩步過程。編譯器首先生成dll,然後嘗試對其進行簽名。請參閱http://msdn.microsoft.com/en-us/library/yh7ks237(v=vs.90).aspx

該DLL將仍然存在,並且不會注意到它的測試已簽名,直到嘗試加載它爲止。我有一個簽名文件,xyz.snk被鎖定在另一個線程中。