【问题标题】:VS2017 Could not load file or assembly Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll or one of its dependenciesVS2017 无法加载文件或程序集 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 或其依赖项之一
【发布时间】:2017-06-13 15:15:48
【问题描述】:

当尝试在 VS2017 中打开旧解决方案时,有一个旧的单元测试项目在构建时给我带来了问题。

我在构建此测试项目时不断收到以下错误:

无法加载文件或程序集“file:///C:\Projects\MyProj\Test\DAL\UnitTestProj\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll”或其依赖项之一。系统找不到指定的文件。

我检查了项目的引用,它似乎引用了Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll。此外,没有代码错误。我怎么知道它是否是它找不到的依赖项之一?

【问题讨论】:

  • 那么,C:\Projects\MyProj\Test\DAL\UnitTestProj\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll' 真的存在吗?想一想,为什么它一开始就在那里?使用参考管理器的“程序集”选项卡删除参考并将其添加回来。不要浏览到磁盘上的 DLL。
  • @我会不会也在想同样的事情......它实际上是在试图在我的项目目录中找到它吗?我已经尝试将其删除,然后转到参考管理器 > 扩展,然后大约有 5 个 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 副本可供参考。引用时我不断收到相同的错误...不知道到底是什么可以告诉项目在 C:\Projects\MyProj... 中查找 dll...我去的时候看不到它References > Assemblies.. 只有 Extensions 有它。
  • 是的,扩展。奇怪的。我看到与我的测试一起使用的是 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 你知道,你总是可以创建一个新的测试项目,手动移动你的类并放弃拙劣的项目文件......
  • @Will 这是最奇怪的事情.. 即使通过 Microsoft Visual Studio 14.0\Common7\IDE\ReferenceAssemblies 重新引用程序集......它仍然不断出错,说它正在寻找它项目目录。
  • @Will 这是我可能会做的事情,但是当涉及到这样的事情时,我无法忍受与源代码控制打交道。此外,我有点希望测试项目是相同的旧版本一直都是,因为它是我没有创建的项目。

标签: asp.net .net visual-studio visual-studio-2017 vs-unit-testing-framework


【解决方案1】:

我在一个最初使用 VS2010 开发的项目中遇到了类似的问题(带有附加消息 The "BuildShadowTask" task failed unexpectedly),因此我不得不花费最后几个小时来了解构建过程的另一个遗留方面。

您很有可能正在处理private accessor files (.accessor),它们是deprecated in VS2012 (original source)。这在 announcement from the VS2010 team 中预示着他们不再致力于这些功能。

您也有可能只是在处理对错误版本的 UnitTestFramework 的错误引用,但 NuGet 还原应该可以解决此问题。如果没有,请参阅this GitHub thread 以获取可能的修复(手动将 ref 更改为公共文件夹),或移至新的 MSTest.TestAdapter 和 MSTest.TestFramework 包(请参阅MSDN support thread)。

解决方案

A.编辑单元测试.csproj 并将Include 引用从Shadow => None 更改: <Shadow Include="Test References\namespace.accessor" />
<None Include="Test References\namespace.accessor" />

B.更好的是,只需从单元测试项目的 Test References 文件夹中删除所有 .accessor 文件。

理想情况下,您还可以重写单元测试以删除对私有方法的引用,方法是重新架构以分离关注点或将属性更改为 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 存根,然后删除内部代码。您只需要保留存根本身。


进一步阅读/帮助我将其拼凑起来的资源:

【讨论】:

  • 我在将项目迁移到 TFS CI 构建时遇到了这个问题。删除“影子”节点修复了它 - 谢谢您,先生!
  • 为我工作。 VS 2019。
【解决方案2】:

右键单击项目引用文件夹。添加参考 > 程序集 > 扩展。选中 Microsoft.VisualStudio.QualityTools.UnitTestFramework 10.1,并取消选中任何旧版本。

【讨论】:

  • Assemblies > Extensions 中没有这样的条目...(事实上,没有)...你在哪里找到这个 dll?不能直接通过nuget添加...
  • 这就是解决方案
  • 添加了新的引用,但还是出现“系统找不到指定文件”的错误
  • 对我不起作用。不得不改为使用brichin的答案。 VS 2019。
  • 由于某种原因,我的安装有 3 个不同的“版本”,其中两个是 10.0,但位于 VS2019 中的两个不同文件夹中。一个在“PublicAssemblies”中,另一个是“ReferencedAssemblies”。我改成“PublicAssemlies”重建,bin文件中出现DLL,问题解决
【解决方案3】:

这与 Visual Studio Enterprise 2015 相关,添加新的负载测试失败:并吐槽为“无法找到程序集 'Microsoft.VisualStudio.QualityTools.LoadTest, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”

由于安装在公共程序集中的程序集显示为 GAC 中缺少的版本 10.0.0.0,

GAC 只有 10.1.0.0。一旦 GAC 更新为 10.0.0.0 并重新启动 VS 2015。应该会解决与此类似的问题。

为了更好的推理,系统组装路径和项目路径的一些更多细节 DLL 路径 ......\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll

.CSProj 参考版本

【讨论】:

  • 也许您可以阐明为什么您认为这可以解决问题中的问题,并阐明您认为需要采取哪些步骤。请注意,您可以对示例进行格式化,以便清楚什么是解释,什么是路径名。
  • “一旦 GAC 更新为 10.0.0.0”...如果你能说出你是如何做到这一点的。我的问题是它拒绝启动已编译的程序。我可以可能成功重新编译它,但我不能保证它与旧版本相同。
【解决方案4】:

我在使用 Visual Studio 2017 之前在 Visual Studio 2022 中将项目升级到 .Net4.8 时遇到了同样的问题。

错误:
无法从程序集 ***\Microsoft.VisualStudio.TestTools.BuildShadowsTask.dll 加载“BuildShadowTask”任务。无法加载文件或程序集“file:///***Microsoft.VisualStudio.TestTools.BuildShadowsTask.dll”或其依赖项之一。

解决方案:我从项目中删除了“.accessor”文件,因为该文件用于访问私有方法(很可能访问器已被弃用)。然后我们使用“PrivateObject”类来访问 UnitTest 中的私有成员。 后来我们更新了单元测试用例。代码参考可以从下面的文章中找到。

Unit test private methods?

Unit Testing: Exposing Private Members

【讨论】:

    【解决方案5】:

    尝试完全卸载 Visual Studio 2017 (不修复)。然后下载最新版本并安装。请记住检查是否将 MSBuild 添加到安装文件中。记得删除 Documents 中的文件夹:Documents\Visual Studio 2017。就我而言,这个简单的解决方案修复了所有错误。

    【讨论】:

      猜你喜欢
      • 2021-12-12
      • 2012-01-14
      • 1970-01-01
      相关资源
      最近更新 更多