我在最初使用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 :
- 使用Microsoft.VisualStudio.TestTools.UnitTesting.PrivateObject类帮助访问代码中的内部和私有API.这可以在Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll程序集中找到.
- 创建一个反射框架,能够反射代码以访问内部或私有API.
- 如果您试图访问的代码是内部的,那么您可以使用InternalsVisibleToAttribute访问您的API,这样您的测试代码就可以访问内部API.
然而,对于lanugage团队添加的新特性,没有任何好的代码生成替代品.您可以创建TestMethod存根,然后删除内部代码.你只需要保留存根本身.
进一步的阅读/资料帮助我把这件事拼凑起来: