当试图在VS2017
中打开旧的解决方案时,有一个旧的单元测试项目在构建时给我一个问题。
构建此测试项目时,我不断收到以下错误:
无法加载文件或程序集'file:/// C:\ Projects \ MyProj \ Test \ DAL \ UnitTestProj \ Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll'或其依赖项之一。该系统找不到指定的文件。
我检查了项目的引用,它似乎引用了Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
。此外,没有代码错误。我怎么能弄清楚它是否是它无法找到的依赖项之一?
我有一个类似的问题(附加消息The "BuildShadowTask" task failed unexpectedly
)与最初使用VS2010开发的项目,并且花了最后几个小时来学习构建过程的另一个传统方面。
很有可能你正在处理private accessor files(.accessor
),这是deprecated in VS2012(original source是404)。这在announcement from the VS2010 team预示他们不再研究这些功能。
你也有可能只是处理错误的引用错误版本的UnitTestFramework,但NuGet恢复应该解决这个问题。如果没有,请参阅this GitHub thread以获取可能的修复(手动将ref更改为公用文件夹),或移至新的MSTest.TestAdapter和MSTest.TestFramework包(请参阅MSDN support thread)。
.csproj
并将项目引用从<Shadow Include="Test References\namespace.accessor" />
更改为<None Include="Test References\namespace.accessor" />
(Shadow
=> None
)。.accessor
文件夹中删除所有Test References
文件。理想情况下,您还需要重写单元测试以删除对私有方法的引用,方法是重新构建单独的关注点或将属性更改为internal
并将“friend”与InternalsVisibleToAttribute
一起使用。
对于那些因某些原因需要继续支持私有方法测试的人,同一篇文章对逻辑问题"What is available for me then?"
提出了以下建议:
对于那些希望继续测试内部API的人,您有三种选择:
- 使用Microsoft.VisualStudio.TestTools.UnitTesting.PrivateObject类来帮助访问代码中的内部和私有API。这可以在Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll程序集中找到。
- 创建一个反射框架,该框架能够反映您的代码以访问内部或私有API。
- 如果您尝试访问的代码是内部代码,则可以使用InternalsVisibleToAttribute访问API,以便您的测试代码可以访问内部API。
但是,对于由语言团队添加的新功能而言,代码生成没有任何良好的替代品。您可以创建TestMethod存根,然后删除内部代码。你只需要保留存根本身。
进一步阅读/来源帮我拼凑了这些:
右键单击项目引用文件夹。添加引用>装配>扩展。检查Microsoft.VisualStudio.QualityTools.UnitTestFramework 10.1,并取消选中任何旧版本。
这与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参考版