Как заставить оператор псевдонима пространства имен :: работать в C #? - PullRequest
16 голосов
/ 06 марта 2009

Я столкнулся с маловероятным сценарием, когда ссылаюсь на две внешние сборки, которые имеют одинаковое пространство имен и имена типов. Когда я пытаюсь использовать тип, компилятор выдает ошибку, что он не может решить, какой из них я хочу использовать.

Я вижу, что C # предлагает механизм использования псевдонимов для ссылок. Вы даже можете указать эти псевдонимы через окно Property ссылки в Visual Studio 2008. Как использовать этот псевдоним в моем коде? Как я понимаю, я должен использовать оператор ::, но он завершается с ошибкой:

CS0432 - Alias not found

Обычный оператор . также не работает.

В окне вывода я вижу, что компилятор правильно передает псевдоним в своей командной строке.

Любые указатели на то, что я могу попробовать дальше, с благодарностью.

Ответы [ 4 ]

17 голосов
/ 06 марта 2009
extern alias alias1;
using alias1::Namespace;
3 голосов
/ 06 марта 2009

Я думаю, вам нужно использовать внешний псевдоним . У Энсона Хортона есть хороший блог по этой проблеме и как использовать внешний псевдоним , чтобы исправить ее.

3 голосов
/ 06 марта 2009

Попробуйте это:

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

И добавьте global,asm1 к проекту для сборки1 и global,asm2 для сборки2

0 голосов
/ 06 марта 2009

Когда вы ссылаетесь на какую-то сборку в проекте, она имеет псевдоним по умолчанию "global". Когда вы добавляете другой псевдоним для этой сборки, например, "global, AssemblyA", вы будете ссылаться на него так:

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

или

void SomeMethod(AssemblyA::Company.Product.SomeType someType) { ... }
...