Asp.net

VS2017 無法載入文件或程序集 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 或其依賴項之一

  • June 13, 2017

當試圖打開一個舊的解決方案時,VS2017有一個舊的單元測試項目在建構時給我帶來了問題。

建構此測試項目時,我不斷收到以下錯誤:

無法載入文件或程序集 ‘file:///C:\Projects\MyProj\Test\DAL\UnitTestProj\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll’ 或其依賴項之一。該系統找不到指定的文件。

我檢查了項目的引用,它似乎正在引用Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll. 此外,沒有程式碼錯誤。我怎麼知道它是否是它找不到的依賴項之一?

我在最初使用 VS2010 開發的項目中遇到了類似的問題(帶有附加消息The "BuildShadowTask" task failed unexpectedly),並且不得不花費最後幾個小時來了解建構過程的另一個遺留方面。

您很有可能正在處理私有訪問器文件.accessor),這些文件在 VS2012原始原始碼)中已被棄用。這在 VS2010 團隊宣布他們不再致力於這些功能的公告中得到了預示。

您也有可能只是在處理對錯誤版本的 UnitTestFramework 的錯誤引用,但 NuGet 還原應該可以解決此問題。如果沒有,請參閱此 GitHub 執行緒以獲得可能的修復(手動將 ref 更改為公共文件夾),或移至新的 MSTest.TestAdapter 和 MSTest.TestFramework 包(請參閱MSDN 支持執行緒)。

解決方案

A. 編輯單元測試.csproj並將項目Include引用從Shadow=> None: <Shadow Include="Test References\namespace.accessor" />更改為

<None Include="Test References\namespace.accessor" />

.accessorB. 更好的是,只需從單元測試項目的文件夾中刪除所有Test References文件。

理想情況下,您還可以重寫單元測試以刪除對私有方法的引用,方法是重新架構以分離關注點,或者將屬性更改為internal並將“朋友”與InternalsVisibleToAttribute.


對於那些出於某種原因需要繼續支持私有方法測試的人,同一篇文章對邏輯問題提供了以下建議"What is available for me then?"

對於那些希望繼續測試內部 API 的人,您有以下三種選擇:

  1. 使用 Microsoft.VisualStudio.TestTools.UnitTesting.PrivateObject 類來幫助訪問程式碼中的內部和私有 API。這可以在 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 程序集中找到。
  2. 創建一個反射框架,該框架能夠反射您的程式碼以訪問內部或私有 API。
  3. 如果您嘗試訪問的程式碼是內部程式碼,您可以使用 InternalsVisibleToAttribute 訪問您的 API,以便您的測試程式碼可以訪問內部 API。

但是,對於語言團隊添加的新功能,程式碼生成沒有任何好的替代品。您可以創建 TestMethod 存根,然後刪除內部程式碼。您只需要保留存根本身。


進一步閱讀/幫助我將其拼湊在一起的資源:

引用自:https://stackoverflow.com/questions/44525487