Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试中调试System.IO.FileLoadException_C#_Unit Testing_Assembly Resolution - Fatal编程技术网

C# 单元测试中调试System.IO.FileLoadException

C# 单元测试中调试System.IO.FileLoadException,c#,unit-testing,assembly-resolution,C#,Unit Testing,Assembly Resolution,对于我正在现代化的项目,我有一套由应用程序的原始开发人员提供的单元测试。在我早期的现代化建设中,它们是完全绿色的;然而,它们已变为红色,但大多数情况下都有相同的例外: 例外情况: System.IO.FileLoadException: Could not load file or assembly 'MyApp.BusinessLayer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependen

对于我正在现代化的项目,我有一套由应用程序的原始开发人员提供的单元测试。在我早期的现代化建设中,它们是完全绿色的;然而,它们已变为红色,但大多数情况下都有相同的例外:

例外情况:

System.IO.FileLoadException: Could not load file or assembly 'MyApp.BusinessLayer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.  Access is denied.

at MyApp.SomeExecutable.SomeClass.SomeMethod(args)
at MyApp.UnitTests.SomeExecutableFixture.CanValidateSomething() in [place of invocation of SomeClass.SomeMethod]
该异常没有内部异常

从我所看到的情况来看,这发生在任何引用
MyApp.BusinessLayer
程序集中定义的内容的方法中,友好的错误消息通知我无法加载该程序集…显然是由于访问被拒绝

我尝试了以下方法来访问程序集:

  • 在Windows资源管理器中导航到程序集,并授予自己完全访问权限。没有效果
  • 导航到Windows资源管理器中的包含文件夹并授予自己完全访问权限。仍然没有效果
  • 以管理员身份运行VS 2015,并重新运行单元测试。没有效果
  • 我认为这种情况很疯狂,所以我检查了VS项目中的引用,但它们都指向我应该测试的程序集(它与UnitTest程序集位于同一文件夹中)。这不可能
  • 试图运行
    fuslogvw.exe
    ,并在运行时运行测试以了解绑定过程。没有信息出现;就好像在Visual Studio 2015中运行测试对Fusion日志查看器是完全不可见的!即使在重新启动之后,Fusion日志查看器也没有关于正在发生的程序集绑定的信息。(感谢@AndrewAu,@CodeCaster)
  • 在建议使用Process Monitor实用程序后,发现发生了一些模拟。我授予了测试文件夹的SomeDomain\SomeUser权限;没有效果。(感谢@DarinDimitrov)
  • 回顾基础知识,确保所有测试中的程序集都是相同的.NET版本,特别是.NET 4.6。他们是;这不可能(多亏了@Kamo)
  • 和同事商量后,我记得我们刚换了笔记本电脑。我试着把代码加载到我的旧笔记本电脑上,它以前在那里工作过。还是不管用
  • 虽然不是最佳实践,但在一阵绝望中,一位同事建议直接引用业务层DLL,而不是通过业务层的C#项目。这也没有任何效果(不过我还是回到了项目参考。)
  • 由于问题的持续存在,我将分支恢复到我记得没有问题的早期版本,并再次尝试单元测试。它以同样的问题失败了。所以,这也不是代码的错
  • 在我使用ReSharper测试运行程序时,一位同事想起了可能导致此类问题的“卷影复制”设置。我禁用了单元测试运行程序的卷影复制选项…但也没有效果

  • 问题:除了授予自己对文件夹的完全访问权限之外,我还可以做些什么来解决此
    FileLoadException
    ,特别是如果这是一个访问权限问题?我所做的一切不应该都解决了访问问题吗?如果是这样的话?

    尝试使用Fusion日志查看器(fuslogvw.exe)了解程序集加载过程?您能否提供一些信息,说明此失败程序集的位置?与要测试的DLL位于同一文件夹中?检查是否有进程未锁定此程序集。您可以使用该工具查看哪些进程打开了它的句柄。@AndrewGray您确定在测试和DLL中的目标是相同的.NET版本吗?启用fusion日志记录后,您需要重新启动Visual Studio。