[英]Unit testing a signed assembly in C#
我正在嘗試為強命名程序集編寫一些單元測試。 單元測試在UnitTests項目中,代碼在Plugins項目中,它們都是同一解決方案的一部分。 插件經過嚴格簽名。 UnitTests引用了插件,所有內容都能很好地編譯。
當我嘗試運行測試時,測試失敗並出現異常,“無法加載文件或程序集……強名稱驗證失敗”
如果我禁用插件簽名,則測試有效,但是使用插件的方式需要簽名。 我該如何解決?
這最終是我遇到的另一個錯誤的結果。 有時在構建插件時,構建會失敗,
程序集簽名失敗; 輸出可能未簽名-錯誤簽名程序集-該進程無法訪問該文件,因為該文件正在被另一個進程使用。
重新構建通常會更正此錯誤。 事實證明,在第二個版本中,Plugins.dll有時會保留並且僅延遲簽名。 UnitTests將采用此延遲簽名的dll並可以抱怨。
要檢查是否是您正在運行的問題,請打開開發人員命令提示符並運行“ sn -vf Plugins.dll”。 如果輸出為“ Plugins.dll是延遲簽名或測試簽名的程序集”,則您可能會遇到一些問題。
我正在使用的解決方法是反復嘗試對Plugins.dll進行簽名,直到它起作用為止。 為此,我首先運行:
sn -i ../../FakeXRMTesting.pfx keyContainer
設置密鑰容器使sn無需密碼即可工作。 接下來,我將Plugins.dll設置為“僅延遲簽名”並添加一個生成后事件
:重復
C:\\“程序文件(x86)” \\“ Microsoft SDKs” \\ Windows \\ v8.0A \\ bin \\“ NETFX 4.0工具” \\ sn.exe -Rc Plugins.dll keyContainer || 轉到:重復
通常,它在工作之前會以4-5失敗。 顯然,這很麻煩,因此最好停止執行任何程序來訪問dll。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.