views:

439

answers:

1

My application contains a piece of code that executes inside of Component Services, so we need to register our business rules layer (and its dependencies) in the GAC. One of those dependencies is FooCore.dll, which contains classes and services visible to the entire app.

Everything was working fine, until I added a new method to a class in FooCore. Now, when I run my unit tests, any test that calls this new method throws a MissingMethodException, even if I update the GAC with the latest version of the assembly. The only fix is to remove FooCore from the GAC before running the tests.

I've tried the following things:

  • Rebuilt entire solution, refreshed stuff in GAC, then ran tests = failure
  • Removed and re-added FooCore assembly reference in test project = failure
  • Ensured that FooCore is set as "Copy Local" in properties = failure

What can I do to ensure that VSTS loads referenced assemblies from their explicitly defined location, rather than from the GAC?

A: 

Further research turned up this forum thread on this issue, in which someone suggests this might be caused by VS2008's Performance Analysis feature holding onto a stale version of the assembly.

I was able to solve my problem by:

  1. Rebuilding my solution, then
  2. Refreshing everything in the GAC, then
  3. Removing and re-adding the assembly references in my test project, then
  4. Closing and re-opening Visual Studio 2008

I'm not sure which of these steps were explicitly necessary, but this "kitchen sink" approach resolved the issue for me.

Update: This Microsoft article states that when a solution is compiled, assemblies found in the GAC are never copied to the output bin\ folder, even if "Copy Local" is set to true.

Seth Petry-Johnson