Ссылка добавлена, но пространство имен не распознано - PullRequest
10 голосов
/ 16 июля 2011

Я добавил DLL в свой проект. DLL содержит пространство имен test.security. Теперь test.security не распознается. Почему это?

Я использую эту DLL в других проектах, и у меня нет других проблем.

Ответы [ 8 ]

19 голосов
/ 16 июля 2011

Используете ли вы Профиль клиента в качестве цели проекта? Рассмотрим этот сценарий:

Проект A -> Цели проекта .NET Framework 4.0

Проект B -> Цели проекта. Профиль клиента .NET Framework 4.0

На проект A ссылается Проект B . Пространства имен в Проект A не распознаются в Проект B .

Если этот сценарий совпадает, это связано с несоответствием цели. Профиль клиента поддерживает подмножество BCL полной структуры. Если сборка зависит от использования полной структуры (например, требуются типы от System.Web и т. Д.), То она не будет использоваться из той базы данных, которая поддерживает только Client Profile.

Простое решение, измените Проект B на .NET Framework 4.0 (не Профиль клиента).

12 голосов
/ 16 июля 2011

Часто это зависит от того, что в этом пространстве имен;например, если там ничего нет, тогда пространство имен на самом деле не существует .

Возможно также, что вы пропустили какую-то другую зависимость, что означает, что компилятор не может использовать (пока не будет добавлена ​​ссылка) любой из типов в этом пространстве имен (например, если все типы в этом пространстве имен зависят от какого-либо типа из Another.dll, а вы еще не ссылались на Another.dll).

Возможно, вы указали неверную версию библиотеки DLL, а версия, на которую вы ссылаетесь, не имеет этого пространства имен.

Возможно, компилятор уже говорит вам о проблемной ссылке, то есть не может ее использовать - посмотрите в списке ошибок / предупреждений.Например, это может быть физически отсутствующий файл, несоответствие версии .NET или проблема с сильными именами, что означает, что он не может использовать ссылку.

5 голосов
/ 16 июля 2011

1. удалить ссылку и добавить ее снова 2. Закройте решение и снова откройте его 3. Создайте новое решение и добавьте в него все старые

4 голосов
/ 03 сентября 2014

Опоздал на вечеринку, но, очевидно, это выяснилось в недавнем поиске, так что это поможет новичку, который приземлится здесь. Вот еще одна вещь, чтобы проверить.

Как указано в комментарии Dummy01 к его ответу на этот вопрос:

Упаковать проект C # в dll или другую библиотеку

"DLL находится в папке вашего проекта или в папке выпуска. Если она выглядит пустой, это потому, что ваши классы определены как частные или внутренние. Вам следует изменить имена, которые вы хотите видеть вне вашей dll, на public."

3 голосов
/ 16 июля 2011

Проверьте вашу DLL, s. Версию и ваш хост-проект. NET версия Скорее всего, есть разные, и это как-то создает проблемы в вашем конкретном случае.

Привет.

2 голосов
/ 13 декабря 2015

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

Проблема в моем случае заключалась в том, что классы в пространстве имен целевого проекта не были публичными. Это означало, что в этом пространстве имен не было ничего доступного, поэтому его на самом деле не было.

Установка их на уровень публичного доступа решила проблему. Надеюсь, это поможет кому-то! :)

1 голос
/ 15 декабря 2016

У меня была такая же проблема. Я изменил консольное приложение на библиотеку классов в свойствах проекта. Это исправило это.

0 голосов
/ 09 апреля 2018

Я хотел бы добавить причину этого, найденную в VB.NET (Visual Studio 2010, в моем случае; ваша может отличаться).

Например, у меня есть два проекта: P1 и P2.

P1 - это приложение, а P2 - библиотека классов.

УСЛОВИЯ:

  • В P1 есть ссылка на P2
  • Как P1, так и P2 нацелены на .NET 4.0 (полный, а не на клиент)
  • И P1, и P2 нацелены на x86 (не то чтобы это, вероятно, имеет значение)
  • 0 ошибок и 0 предупреждений

Однако в P1 невозможно ни объявить выражение «Imports P2 ...», ни использовать какие-либо совместно используемые методы, найденные в P2. Это так же, как если бы Пространство имен P2 не существует, хотя ссылка есть.

Причина: P2 был преобразован в отдельную сборку из кода, в котором все методы содержались в публичном модуле VB.NET. Однако «Модуль» не был перепечатан как Публичный класс.

Никаких ошибок, но пространство имен P2 было полностью недоступно для P1, пока не был создан открытый класс.

Следует отметить, что на самом деле не было необходимости конвертировать оригинальный Модуль в Класс. Необходимо было только объявить some Public Class (даже если он пуст) в пространстве имен P2, и тогда все методы, найденные в этом Public Module, были доступны.

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