C# 在NCrunch中运行但不在Resharper中运行的单元测试
我有一组单元测试,它们在NCrunch和VS2012测试运行程序中的resharper7中工作得非常好。我通过NuGet添加了signer和signer.Ninject,现在我的单元测试在NCrunch中工作,但不再在Resharper中运行 TestFixtureSetUp失败,出现以下错误:C# 在NCrunch中运行但不在Resharper中运行的单元测试,c#,unit-testing,resharper,signalr,ncrunch,C#,Unit Testing,Resharper,Signalr,Ncrunch,我有一组单元测试,它们在NCrunch和VS2012测试运行程序中的resharper7中工作得非常好。我通过NuGet添加了signer和signer.Ninject,现在我的单元测试在NCrunch中工作,但不再在Resharper中运行 TestFixtureSetUp失败,出现以下错误: SetUp : System.IO.FileLoadException : Could not load file or assembly 'Ninject, Version=2.2.0.0,
SetUp : System.IO.FileLoadException : Could not load file or assembly
'Ninject, Version=2.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7'
or one of its dependencies. The located assembly's manifest definition does
not match the assembly reference. (Exception from HRESULT: 0x80131040)
at ProjectName.Infrastructure.SiteResolver.BindSignalR(IKernel kernel)
at ProjectName.Infrastructure.SiteResolver.RegisterServices(IKernel kernel) in SiteResolver.cs: line 29
at ProjectName.Tests.Unit.DataTests.Init() in DataTests.cs: line 48
在App.Config中,我有
<runtime>
<assemblyBinding>
<dependentAssembly>
<assemblyIdentity name="Ninject" publicKeyToken="c7192dc5380945e7" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
我没有一个具体的答案,但在追踪这类问题时,我使用Fusion日志查看器。打开Visual Studio命令提示符并运行fuslogvw.exe 如果在禁用日志记录之前未执行此操作,请进入设置并将其设置为将绑定失败记录到磁盘。如果您发现它最初没有显示任何日志,请尝试在管理模式下启动命令提示符 我最近遇到过类似的问题,正是这个工具为我解决了这个问题,尽管有趣的是,它通常在Resharper中工作
解决方案几乎总是一个绑定问题,因此您的位置是正确的。VS2012中似乎存在一个错误,除非您使用testsettings文件,否则无法获取绑定重定向 不管您使用的是哪个测试框架,只需右键单击解决方案并添加一个新的testsettings文件。默认情况下,这是空的,这是您需要的。从这里开始,您只需将其标记为活动测试设置工具->测试->选择活动测试设置->文件名 更新: 根据这个链接:人们似乎已经能够从@bryanbcook最初提到的R7.1中找到解决方案,尽管Resharper 7.1升级没有起作用,但其中一位评论者发布了一些代码来强制解决。我已经填写了单元测试基类中的空白:
public class UnitTestBase
{
static DataTests()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomainAssemblyResolve;
}
public static Assembly CurrentDomainAssemblyResolve(
object sender, ResolveEventArgs args)
{
var name = new AssemblyName(args.Name);
return name.Name == "Ninject"
? typeof(KernelBase).Assembly : null;
}
}
这样做了,但日志查看器中没有显示任何内容。这是一个脾气暴躁的野兽,当你查看日志时,不要以管理员的身份运行它,日志存储在本地用户文件夹中的某个位置,因此如果管理员用户不是你通常的登录名,它可能不会因此显示日志。啊,对了,谢谢。在问题中张贴日志。但我不太清楚该怎么办。我希望我能+2,因为我实际上建议使用fuslogvw.exe-一个我很少看到的工具,它能足够快地用于顽固的程序集加载错误。很好的建议。哪个版本的Visual Studio?VS2012中R?Resharper 7的哪个版本。最新问题;谢谢。VS2012更新1应该已经修复了这个bug,所以程序集绑定重定向现在应该可以在单元测试项目中工作。我应该指出,从VS的角度来看,当您添加mstest项目时,测试设置总是添加到解决方案中,所以它不是一个真正的bug…感谢您回答Bryan。我已经试过了,但结果没有变化。人们在上面的链接中评论说,这在10月8日版本7.1 EAP中有效,10月16日刚刚安装了Build 7.1.7.40。没有更改。我在我的VS2012中找不到工具->测试->选择活动测试设置->文件名,但改为菜单:测试->测试设置->选择测试设置文件->文件名FWIW
public class UnitTestBase
{
static DataTests()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomainAssemblyResolve;
}
public static Assembly CurrentDomainAssemblyResolve(
object sender, ResolveEventArgs args)
{
var name = new AssemblyName(args.Name);
return name.Name == "Ninject"
? typeof(KernelBase).Assembly : null;
}
}