Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unit tests running in NCrunch but not in Resharper

I've got a set of unit tests that used to work very nicely in NCrunch and the Resharper 7 (in VS2012) test runner. I added SignalR and SignalR.Ninject through NuGet, and now my unit tests work in NCrunch, but no longer run in Resharper.

The TestFixtureSetUp failed with the following error:

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

In App.Config, I have

<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>

The equivalent in Web.Config works in the actual MVC project.

Any ideas how to fix it?

Update

I've tried with shadow-copying on and off, with no difference in outcome.

Update

Output from log file generated from Jim Skim's answer:

*** Assembly Binder Log Entry  (15/10/2012 @ 16:43:47) ***

The operation failed.
Bind result: hr = 0x80131040. No description available.

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Running under executable  C:\Program Files (x86)\JetBrains\ReSharper\v7.0\Bin\JetBrains.ReSharper.TaskRunner.CLR4.MSIL.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = ######\simon
LOG: DisplayName = Ninject, Version=2.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7
 (Fully-specified)
LOG: Appbase = file:///Z:/ProjectName/ProjectName.Tests.Unit/bin/Debug
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = ProjectName.Tests.Unit
Calling assembly : ProjectName.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: Z:\ProjectName\ProjectName.Tests.Unit\bin\Debug\ProjectName.Tests.Unit.dll.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Ninject, Version=2.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///Z:/ProjectName/ProjectName.Tests.Unit/bin/Debug/Ninject.DLL.
LOG: Assembly download was successful. Attempting setup of file: Z:\ProjectName\ProjectName.Tests.Unit\bin\Debug\Ninject.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: Ninject, Version=3.0.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: The assembly reference did not match the assembly definition found.
ERR: Run-from-source setup phase failed with hr = 0x80131040.
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
like image 817
harriyott Avatar asked Oct 15 '12 13:10

harriyott


2 Answers

I don't have a specific answer, but when tracking down this sort of issue I use the Fusion log viewer. Open up a Visual Studio Command Prompt and run fuslogvw.exe

If you've not done this before the logging will be disabled, go into the settings and set it to Log binding failures to disk. If you find it doesn't initially show any logs, try starting the command prompt in Admin mode.

I've had issues like this recently, and it was this tool that worked it out for me, though interestingly it usually always works in Resharper.

The solution is almost always a Binding problem, so you're in the right place.

like image 94
James Skimming Avatar answered Sep 19 '22 23:09

James Skimming


There appears to be a bug in VS2012 that doesn't pick up the binding redirects unless you are using a testsettings file http://youtrack.jetbrains.com/issue/RSRP-329746

Regardless which test framework you are using, simply right click the solution and add a new testsettings file. By default, this is empty, which is what you'll need. From there all you need to do is mark it as the active test settings (Tools -> test -> Select active test settings -> name of file)

Update:

As per this link: http://youtrack.jetbrains.com/issue/RSRP-329567 it seems people have been able to get this to workaround to work with R# 7.1

like image 20
bryanbcook Avatar answered Sep 20 '22 23:09

bryanbcook