Question

I've come up against the unlikely scenario when I reference two external assemblies that both have the same namespace and type names. When I try to use the type, the compiler throws an error that it cannot resolve which one I want to use.

I see that C# offers a mechanism to use aliases for references. You can even specify these aliases via the Property window of a reference in Visual Studio 2008. How do I use this alias in my code? As I understand, I should be using the :: operator, but it fails with the following error:

CS0432 - Alias not found

The usual . operator fails as well.

In the output window I see that the compiler gets the alias passed correctly in its command line.

Any pointers on what I may be able to try next are greatly appreciated.

Was it helpful?

Solution

extern alias alias1;
using alias1::Namespace;

OTHER TIPS

Try this:

extern alias asm1;
extern alias asm2;

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            asm1.MyNs.MyClass mc1 = null;
            asm2.MyNs.MyClass mc2 = null;
        }
    }
}

And add global,asm1 to the project reference for assembly1 and global,asm2 for assembly2

I think you need to use an extern alias. Anson Horton has a good blog on this problem and how to use extern alias to fix it.

When you reference some assembly in project it has default alias "global". When you add another alias for that assembly, e.g. "global, AssemblyA", you will reference it like this:

using SomeTypeAlias = AssemblyA::Company.Product.SomeType;

or:

void SomeMethod(AssemblyA::Company.Product.SomeType someType) { ... }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top