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

在构建此测试项目时,我始终收到以下错误:



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

最佳答案

我最初使用VS2010开发的一个项目也遇到了类似的问题(带有附加消息The "BuildShadowTask" task failed unexpectedly),并且花了最后几个小时来了解构建过程的另一个遗留方面。
您很有可能正在处理private accessor files(deprecated in VS2012),即original source(.accessor)。在announcement from the VS2010 team中已预示了它们不再使用这些功能。
您也有可能只是在处理对错误版本的UnitTestFramework的错误引用,但是NuGet还原应该可以解决此问题。如果不是,请参见this GitHub thread以获得可能的修复(手动将引用更改为公用文件夹),或移动到新的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.更好的是,只需从单元测试项目的.accessor文件夹中删除所有Test References文件。
理想情况下,您还可以重写单元测试以删除对私有(private)方法的引用,方法是重新架构以分离关注点,或者将属性更改为internal,并在 InternalsVisibleToAttribute 中使用“friend”。

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




进一步的阅读/帮助我将其组合在一起的资料:

  • VS 2005 ASP.NET explanation的访问者
  • 2008 blog article解释如何针对构建服务器解决此问题
  • MSDN forum thread讨论访问器的目的,实现和解决方法。从大约1/3开始下降。
  • MSDN BaseShadow docs
  • MSDN PrivateObject class
  • 09-27 15:57