Что делать, если два класса в одном пространстве имен включены в две разные библиотеки в C # - PullRequest
3 голосов
/ 31 мая 2011

У меня есть программа (основное приложение, состоящее из устаревшего кода), которая использует библиотеку.К сожалению, и основное приложение, и библиотека используют классы (с одинаковыми именами и одинаковыми свойствами) с именем Softwares.SoftwareXSD.Когда я использую класс, определенный внутри Softwares.SoftwareXSD, основная программа жалуется на неоднозначность.Тем не менее, Visual Studio говорит, что он достаточно умен, чтобы выбирать среди дубликатов, отображая зеленое подчеркивание под именем класса.Я считаю, что это не очень хороший подход.

Есть ли какие-либо проблемы с этим?Как лучше всего обойти эту ситуацию?

Проблема в том, что некоторые классы в XSD специфичны для основного приложения, а некоторые - для библиотеки, но эти классы связаны друг с другом с помощью ссылок.

Ответы [ 3 ]

9 голосов
/ 31 мая 2011

Если я правильно понял ваш вопрос, у вас есть два класса Softwares.SoftwareXSD в разных сборках (основное приложение и библиотека), полное имя которых совпадает.

Чтобы решить эту проблему, перейдите в обозреватель решений в Visual Studio, разверните «Ссылки», щелкните правой кнопкой мыши ссылку на вашу библиотеку и выберите свойства.

В «Псевдонимах» замените «глобальный» другим псевдонимом, например, "Библиотека".

Теперь вы можете устранить неоднозначность ссылок следующим образом:

global::Softwares.SoftwareXSD // is in the main application
library::Softwares.SoftwareXSD // is in the library

Тем не менее, я бы по-прежнему рекомендовал вам выбирать уникальные имена для ваших классов.

3 голосов
/ 31 мая 2011

Вы можете использовать псевдоним для пространства имен библиотеки для устранения неоднозначности членов:

using XSD = Softwares.SoftwareXSD;

затем позже:

XSD.SomeClass.SomeLibraryCall();
1 голос
/ 31 мая 2011

Если компилятор жалуется на «недвусмысленную ссылку», потому что у вас есть два пространства имен с одинаковым именем класса, и вы используете операторы для обоих пространств имен (в вашем случае), вы можете обойтись без ключевого слова global.

пример: using LegacySoftwareXSD = global::LegacySoftwares.Softwares.SoftwareXSD;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...