Resharper从不同的位置运行UnitTest

当我用Visual Studio运行unit testing时,它工作正常,因为它从所有程序集所在的项目目录运行。 但是,当我用resharper运行它随着错误

var services = Assembly.Load("SomeAssembly"); 

与错误

无法加载文件或程序集“SomeAssembly”或它的一个依赖项。 该系统找不到指定的文件..

所以我试过了

 var path = Assembly.GetExecutingAssembly().Location; 

这不是项目之一。 它的

C:\用户\ *用户名* \应用程序数据\本地的\ Temp \ TestResults \ … \输出\

而且没有“SomeAssembly” 。 如何正确configurationresharper或收集像Visual Studio一样的所有程序集?

它发生在unit testing,但不与NUnit,任何想法?

Resharper Shadow会默认复制程序集以进行testing。 如果closures阴影复制,它将运行在bin文件夹中,并且testing应该通过。 以下是一些closures的说明。

在NUnit的Gui Test Runner设置文档中有关于Shadow Copy的以下说明

注意:如果试图禁用卷影副本以访问与assembly体相同的目录中的文件,则应该意识到还有其他select。 考虑使用Assembly.Codebase属性而不是Assembly.Location。

这是一个使用Assembly.Codebase属性的例子

  private string AssemblyLocation() { var assembly = Assembly.GetExecutingAssembly(); var codebase = new Uri(assembly.CodeBase); var path = codebase.LocalPath; return path; } 

我有同样的问题,resharpertesting运行者是在C:\而实际的内置dll和解决scheme是在另一个驱动器。 解决方法是在resharper选项的MSTest设置页面中取消选中“Use Legacy Runner”。

尝试创buildtesting设置文件,并为您的testingconfiguration部署规则 。

旧版本的resharper 在处理部署文件夹时似乎有一些bug ,我认为它在最新版本的resharper 7中是固定的 。

试试这个代码加载(见下文)。 它将查找独立于testing运行程序的程序集。

 private static string[] assemblyLookupPath = new[] { AppDomain.CurrentDomain.BaseDirectory, Environment.CurrentDirectory, Assembly.GetExecutingAssembly().Location }.Distinct().ToArray(); public static void Assembly Load(string fileName) { var filePath = assemblyLookupPath .Select(f=>Path.Combine(f, fileName)) .Where(File.Exists) .FirstOrDefault(); /*do here null checks and raise errors, write logs, etc*/ return Assembly.LoadFrom(filePath ) } 

您正在使用Assembly.Load()dynamic加载您的程序集。 可能是你缺less一个引用程序集加载。 否则,阴影复制可能会漏掉未引用的程序集。

如果您不想引用这些程序集,请确保将它们包含在项目中并将其复制到输出目录。 您可以通过设置“ 复制到输出目录 ”属性或创build自定义构build后步骤来完成此操作。

为了完成mcdon非常有用的答案,使用assembly.Location根据MSFT的解释给出了正确的答案:

CodeBase是find文件的地址的URL,而Location是实际加载的path。 例如,如果程序集是从互联网上下载的,则它的代码库可能以“http://”开头,但其位置可能以“C:\”开头。 如果该文件被阴影复制,则位置将是阴影副本目录中文件副本的path。

知道CodeBase不能保证在GAC中为程序集设置也是很好的。 但是,位置将始终设置为从磁盘加载的程序集。

所以我会使用以下内容:

 public static DirectoryInfo GetAssemblyDirectory() { var assembly = Assembly.GetExecutingAssembly(); return new DirectoryInfo(Path.GetDirectoryName(assembly.Location)); } 

我解决这个问题的方法是在testing项目的nunit.framework.dll参考中将“Copy Local”属性设置为true。

如果在禁用“阴影构build”后运行并生成问题,则必须先从“构build”选项中select“全部清除”,然后在“阴影构build”禁用的情况下构build项目

只要改变当前的目录

 var dir = Path.GetDirectoryName(typeof(MySetUpClass).Assembly.Location); Environment.CurrentDirectory = dir; // or Directory.SetCurrentDirectory(dir); 

https://github.com/nunit/nunit/issues/1072