2010-04-26 42 views
26

我有一個使用AjaxControlToolkit.dll和Log4Net.dll的網站。如何使用VS 2010或VS 2013分析簽名裝配

當我嘗試運行在VS 2010中的性能分析工具,它讓我有以下警告:

AjaxControlToolkit.dll簽名並插裝它會作廢其簽名。如果您在沒有儀器後事件的情況下繼續重新簽名二進制文件,則可能無法正確加載。

現在,如果我選擇繼續而不重新簽名的選項,則會開始分析,但程序集不會加載並給出ASP.NET異常。

+0

請注意[PathofDLL](每個文斯和古斯的答案)將位於obj項目文件夾中,而不是bin文件夾中。 – Mark 2010-10-07 08:54:24

回答

1

分析器可能會改變程序集,因爲它以前已簽名。 顯然您需要添加重新簽署程序集的儀器後操作。

這可能是一個問題,因爲您沒有用於簽署第三方程序集的sn文件。

7

答案描述爲here。您必須在每個簽名程序集上使用儀器後事件。

我無法管理,使其工作「的是」我的2010年安裝VS我不得不把這個命令行上的每個DLL中的生成後事件:

"C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" & sn -Ra [pathOfDll] [pathOfSNK] 

注意[pathOfDll]位於與項目關聯的目錄obj \ Debug中。

17

ghusse鏈接到blog post giving the answer。那裏描述了答案。正如他指出的那樣,您必須在每個簽署的組件上使用儀器後事件。

這是最簡單直接調用sn.exe

"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -R [pathOfDll] [pathOfSNK] 

注意[pathOfDll]位於目錄OBJ \相關的項目調試

+0

這是個什麼答案?應該在哪裏調用? – serhio 2011-06-09 15:19:58

+0

答案是ghusse提供的鏈接:http://blogs.msdn.com/b/ianhu/archive/2005/07/25/443021.aspx。 – Vince 2011-06-21 08:43:30

+1

這似乎讓我經歷了最初的問題,不幸的是我遇到了讓Web服務器在此之後啓動的問題。我也會注意到,儘管爲每個程序集實現這個事件對於像我們在項目中執行的30多個程序集都是一件痛苦的事情。 – jpierson 2012-09-21 14:40:42

19

如果您在開發機器上執行此操作,您可以使用sn -Vr *完全禁用強名稱驗證。如果你這樣做,你不必辭任任何東西。這種方法可能會帶來安全風險,但如果您對此感到滿意,則可以使用,這比取消更容易。

具體而言,從MSDN,它說:

寄存器組件,其用於驗證跳過。或者,您可以指定用逗號分隔的用戶名列表。如果您指定了infile,則驗證將保持啓用狀態,但infile中的公鑰將用於驗證操作。可以用*,strongname的形式指定程序集,以註冊具有指定強名稱的所有程序集。應將Strongname指定爲表示公鑰的標記形式的十六進制數字字符串。請參閱-t和-T選項以顯示公鑰標記。

,使安全風險:

注意:使用此選項僅在開發過程中。將程序集添加到跳過驗證列表中會造成安全漏洞。惡意程序集可以使用添加到跳過驗證列表中的程序集的完全指定的程序集名稱(程序集名稱,版本,區域性和公鑰標記)來僞造其身份。這將允許惡意程序集也跳過驗證。

+5

..並且不能忘記相反: 'sn -Vu *' (這是爲了重新啓用此方法驗證) – 2011-11-17 21:10:41

+2

'sn -Vx'也重新啓用所有組件的驗證。引用文檔:「刪除所有驗證跳過條目」。 – 2012-03-09 21:39:07

+1

爲了分析第三方程序集,我沒有簽名密鑰,這被證明是我能夠工作的唯一解決方案 – 2014-05-08 23:46:04

0

有可能採取的懶惰學習新的東西,免費的方式在這裏,但我最終通過編寫一個PowerShell腳本來unsign在我的解決方案的所有項目解決這個 - 工作就好了。作爲腳本的一部分,我保存了原始的csproj文件,以便我可以在之後恢復它們。 (你也可以撤銷源代碼管理中的更改)。

http://pastebin.com/UbABvz7d

應該能夠通過調用它傳遞-revert開關恢復。

+0

請注意,這可能不是所有類似問題的選項。 CodeAnalysis規則[代碼分析規則CA2240](https://msdn.microsoft.com/en-us/library/ms182127.aspx)可以給編譯錯誤,並使用[InternalsVisibleTo屬性](https://msdn.microsoft。 com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute%28v = vs.110%29.aspx)也會失敗。 – 2015-06-02 05:17:40

3

最簡單的方法是使簽署的二進制文件(尚未重新簽名)的檢測工作完全禁用簽名檢查。這是一個機器範圍的設置,則可以通過註冊異常爲*圖案激活:

sn.exe -Vr * 

該命令必須從提升的命令提示來執行。你會在SDK中找到sn.exe(在我的情況下,我發現它在C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin)。

當你與測試完成後,你應該註銷例外:

sn.exe -Vu * 

否則你的機器可能會受到惡意的代碼,因爲組件將即使他們已被篡改,被信任。

另請參閱Access denied running sn.exe on Windows 7