Пространство имен и конфликт классов - PullRequest
6 голосов
/ 17 сентября 2010

У меня проблема с конфликтом между классом DateTime и пространством имен, по неизвестной причине также называемым DateTime.

Сборка CompanyDateTime имеет пространство имен Company.DateTime

Мое приложение находится в пространстве имен: Компания

проблема в том, что каждый раз, когда мне нужно использовать DateTime класс, я должен прямо сказать System.DateTime есть ли у них какой-нибудь способ обойти это?

Можно сказать SomeRandomStuff = Company.DateTime и иметь DateTime всегда быть System.DateTime

Примечание:

  1. Мне нужно ссылаться на эту сборку в моем приложении, даже если я ее не использую, потому что какая-то сборка, которая мне нужна, на самом деле использует этот класс.
  2. Я могу использовать запись в файле app.config для определения зависимой сборки, но я не могу этого сделать, поскольку политика компании противоречит ей, и все ссылочные сборки должны находиться в выходной папке.
  3. Развертывание происходит через сервер сборки

Возможное разрешение? Возможно ли для CompanyDateTime автоматическое развертывание в папке вывода без добавления его в ссылку?

Ответы [ 4 ]

9 голосов
/ 17 сентября 2010

Вопрос: проблема в том, что каждый раз, когда мне нужно использовать класс DateTime, я должен явно сказать, что System.DateTime - это их любой способ обойти это

Ответ: Вы уже ответили выше - используйте псевдоним, например,

using CompanyDateTime = Company.DateTime;

using StandardDateTime = System.DateTime;

Вопрос: Возможно ли, чтобы CompanyDateTime автоматически развертывался в выходной папке, не добавляя ее в ссылку?

Ответ: Поместите эту DLL в корневую папку приложения и создайте событие postbuild, которое копирует его в выходную папку. Вы можете использовать обычную команду DOS COPY здесь.

Для получения подробной информации о событиях после сборки см. Ссылку

8 голосов
/ 17 сентября 2010

Да, используйте директиву using в верхней части файлов кода, которые ссылаются на нее следующим образом:

using SomeRandomStuff = Company.DateTime;

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

using DateTime = System.DateTime;
4 голосов
/ 17 сентября 2010

Дайте сборке псевдоним (по умолчанию global, установите для себя другое значение). Вы можете установить это в окне свойств Visual Studio, когда выбираете ссылку, или использовать переключатель компиляции, если вы компилируете вручную. Компилятор будет разрешать только глобальный псевдоним, если только вы не укажете внешний псевдоним в верхней части файла кода (extern alias myalias).

Обратите внимание, это отличается от псевдонима пространства имен, упомянутого другими. При этом вы просто сможете использовать DateTime для ссылки на System.DateTime, а не использовать другое имя. Если вам нужно обратиться к другому позже, вам нужно будет указать myalias::Company.DateTime...

2 голосов
/ 17 сентября 2010

Используйте псевдоним .

Если вы хотите использовать System.DateTime без использования System, попробуйте:

using SysDate = System.DateTime;

Тогда, просто ссылайтесь на него, как на класс:

SysDate mySystemDotDateTime = new SysDate();

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