在執行測試時,發生了如下的錯誤訊息,而測試並未被執行
Strong name verification failed for the instrumented assembly 'Microsoft.Practices.Unity, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. Please ensure that the right key file for re-signing after instrumentation is specified in the test settings.
原因
為了取得 Code Coverage的資訊,執行測試時,事實上是在受測的 assembly 增加了一些程式,以方便取得資訊。
然而,如果 assembly 本身就有 strong name的話,被增加了一些程式,當然會被認為不安全了。因此這個機制就無效,也就無法取得 Code coverage 的資訊了。
解法
可見 Instrumenting and Re-Signing Assemblies。我使用的是比較簡單的Disable Signing Verification方法,也就是不檢查某些 assembly 的簽章啦。
解決我的問題,就是在 cmd.exe 下 sn –Vr Microsoft.Practices.Unity.dll 就解決了。
這樣,只會影響執行測試的機器無法檢查指定的 assembly 了。
進階解法
雖然使用上述的方法可以解決該問題,但在該台機器就不檢查這些指定的 assembly?好像也不太對。最好能在測試前執行 sn –Vr assembly.dll,測試後再回復設定。
因此,就可以使用 sn –Vu assembly.dll 語法了。該語法還原 assembly.dll 成必須檢查 strong name。另外,在執行測試的設定(通常是 LocalTestRun.testrunconfig)上,設定 setup and cleanup scripts,執行這些指令就可以了。
如下圖。setup.cmd 內放 sn –Vr assembly.dll , cleanup.cmd 放sn –Vu assembly.dll
沒有留言:
張貼留言