33

So here is my problem.

  • My (test) project references both Castle Windsor and Rhino Mocks.
  • I am creating a class which implements Castle.Core.Interceptor.IInterceptor from the Castle.Core.dll assembly
  • In building Rhino Mocks, Ayende used Castle.Core.Interceptor and includes the whole darn namespace inside the Rhino.Mocks.dll

So when I try to build, I get the error

The type 'Castle.Core.Interceptor.IInterceptor' exists in both 'c:...\Libraries\Rhino.Mocks.dll' and 'c:...\Libraries\Castle.Core.dll'

How then do I specify that I want to use the IInterceptor instance from the Castle.Core.dll rather than the one included in Rhino Mocks?

George Mauer
  • 117,483
  • 131
  • 382
  • 612

2 Answers2

53

Let's throw the specific answer up here in case someone comes along later. From article here.

  • Select one of the two assemblies under project references (in my case I selected Castle.Core). Hit F4 to bring up properties and enter alias CastleCore
  • At the top of the problematic cs file put extern alias CastleCore;
  • Reference your class with CastleCore::Castle.Core.Interceptors.IInterceptor. Or in my case I simply did:

using cci = CastleCore::Castle.Core.Interceptors;

and can now reference

cci.IInterceptor
George Mauer
  • 117,483
  • 131
  • 382
  • 612
  • In my case I am not able to enter an alias name in the properties section when hitting F4, so I found a solution of adding the alias name in the .csproj https://stackoverflow.com/questions/32201437/dapper-ambiguous-extension-methods/55620553#55620553 – Mayer Spitz Apr 10 '19 at 20:44
7

You can use an extern alias to alias one of the assemblies to prevent the ambiguity.

Peter Duniho
  • 68,759
  • 7
  • 102
  • 136
Andrew Hare
  • 344,730
  • 71
  • 640
  • 635