Используйте типы с одинаковым именем и пространством имен в 2 сборках.NET
Из любопытства я создал 2 сборки, у каждой из которых есть класс (Class1
) с точно таким же пространством имен (Library1
). Затем я создаю другой клиент, ссылающийся на эти 2 сборки, и пытаюсь создать экземпляр Class1
,
Неудивительно, что компилятор дает мне ошибку компиляции о неоднозначной ссылке. Есть ли способ явно указать тип в сборке, которую я хочу использовать, чтобы избежать двусмысленности?
Примечание: я знаю, что это редко, если вообще случается, происходит на практике. Это просто вопрос из любопытства по поводу языковых особенностей.
2 ответа
Я думаю, что вы должны использовать внешний псевдоним, чтобы обернуть пространства имен сборки за пределами глобального пространства имен. Вот как:
В проекте, который ссылается на 2 сборки, выберите одну из них в разделе "Ссылки" и в окне "Свойства" измените значение "Псевдонимы" с
global
сказать,global, Library1a
,Сделайте то же самое для другой ссылки, но дайте ему другой псевдоним.
global, Library1b
для нашего примера.Вставить
extern alias Library1a;
и / илиextern alias Library1b;
как первые 2 строки любых классов, которые потребляют сборки.При доступе к неоднозначным членам, квалифицируйте пространство имен с
Library1a.
или жеLibrary1b.
, Примеры:Library1a.Library1.Class1...
Library1b.Library1.Class1...
Это происходит на практике и является настоящей болью, внешний псевдоним не всегда может решить проблему. Вот один из примеров, где возникает проблема. Дублируйте пространства имен.