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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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