Используйте типы с одинаковым именем и пространством имен в 2 сборках.NET

Из любопытства я создал 2 сборки, у каждой из которых есть класс (Class1) с точно таким же пространством имен (Library1). Затем я создаю другой клиент, ссылающийся на эти 2 сборки, и пытаюсь создать экземпляр Class1,

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

Примечание: я знаю, что это редко, если вообще случается, происходит на практике. Это просто вопрос из любопытства по поводу языковых особенностей.

2 ответа

Решение

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

  1. В проекте, который ссылается на 2 сборки, выберите одну из них в разделе "Ссылки" и в окне "Свойства" измените значение "Псевдонимы" с global сказать, global, Library1a,

  2. Сделайте то же самое для другой ссылки, но дайте ему другой псевдоним. global, Library1b для нашего примера.

  3. Вставить extern alias Library1a; и / или extern alias Library1b; как первые 2 строки любых классов, которые потребляют сборки.

  4. При доступе к неоднозначным членам, квалифицируйте пространство имен с Library1a. или же Library1b., Примеры: Library1a.Library1.Class1...Library1b.Library1.Class1...

Это происходит на практике и является настоящей болью, внешний псевдоним не всегда может решить проблему. Вот один из примеров, где возникает проблема. Дублируйте пространства имен.

Другие вопросы по тегам