簡體   English   中英

使用C#對簽名的程序集進行單元測試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM