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

I keep getting the following error when building this test project:

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

我查看了该项目的参考资料,它似乎参考了Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll个.此外,没有代码错误.我怎么知道它是否是它找不到的依赖项之一?

推荐答案

我在最初使用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以获取可能的修复(手动更改对公用文件夹的引用),或移动到新的MSTest.TestAdapter和MSTest.TestFramework包(请参见MSDN support thread).

解决方案

A. Edit the unit test .csproj and change the item Include references from Shadow => None: <Shadow Include="Test References\namespace.accessor" /> to
<None Include="Test References\namespace.accessor" />

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

理想情况下,您还可以重写单元测试以删除对私有方法的引用,方法是重新设计以分离关注点,或者将属性更改为internal并将"Friend"与InternalsVisibleToAttribute一起使用.


对于出于某种原因需要继续支持私有方法测试的人,同一篇文章为逻辑问题"What is available for me then?"提供了以下建议:

对于希望继续测试内部API的用户,您有三个 Select :

  1. 使用Microsoft.VisualStudio.TestTools.UnitTesting.PrivateObject类帮助访问代码中的内部和私有API.这可以在Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll程序集中找到.
  2. 创建一个反射框架,能够反射代码以访问内部或私有API.
  3. 如果您试图访问的代码是内部的,那么您可以使用InternalsVisibleToAttribute访问您的API,这样您的测试代码就可以访问内部API.

然而,对于lanugage团队添加的新特性,没有任何好的代码生成替代品.您可以创建TestMethod存根,然后删除内部代码.你只需要保留存根本身.


进一步的阅读/资料帮助我把这件事拼凑起来:

Asp.net相关问答推荐

单个方法(即扩展方法)之间的调用不明确

逐步 ASP.NET 自动构建/部署

ASP .Net Web API 将图像下载为二进制

在 Sessions 中存储自定义对象

获取没有主机的 url 部分

如何在 ASP.NET 中使用时区?

将 null 转换为字符串的函数

ASP.NET MVC 中的 ASP.NET AJAX 与 jQuery

ASP.NET 在更新面板更新时显示正在加载...消息

如何确定 web.config 中的编译 debug="true"

如何以编程方式将标签的前景色设置为其默认值?

使用 LINQ 进行递归控制搜索

如何在 ASP.NET 站点中添加 favicon.ico

如何在 asp net core api 中使用 Created(或 CreatedAtAction / CreatedAtRoute)

如何将数据集转换为数据表

无法在 IIS 中启动网站 - W3SVC 正在运行

如何通过 Google 图表 API 使用 X 轴中的日期?

在 ASP.NET 标识中添加角色

Facebook 连接和 ASP.NET

如何使用实体框架执行原始 SQL 查询而无需使用模型?