Подтвердить что ты не робот

Как получить оператор псевдонима пространства имен:: работать под С#?

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

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

CS0432 - Alias not found

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

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

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

4b9b3361

Ответ 1

extern alias alias1;
using alias1::Namespace;

Ответ 2

Попробуйте следующее:

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 в ссылку на проект для assembly1 и global,asm2 для сборки2

Ответ 3

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

Ответ 4

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

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

или

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