Не удалось найти имя типа или пространства имен

У меня есть C# решение с несколькими проектами в Visual Studio 2010, Один - это тестовый проект (я назову его "PrjTest"), другой - Windows Forms Application проект (я назову это "PrjForm"). Существует также третий проект, на который ссылается PrjForm, на который он может ссылаться и успешно использовать.

PrjForm ссылается на PrjTest, а PrjForm имеет класс с using заявление:

using PrjTest;
  1. Ссылка была правильно добавлена
  2. using заявление правильно на месте
  3. Орфография правильная
  4. PrjTest строит успешно
  5. PrjForm почти строит, но ломает на using PrjTest; строка с ошибкой:

Не удалось найти тип или имя пространства имен "PrjTest" (отсутствует директива using или ссылка на сборку?)

Я пробовал следующее, чтобы решить эту проблему:

  1. Удален Resharper (поскольку Resharper без труда распознал указанный проект, я подумал, что это может стоить того)
  2. Удалена и повторно добавлена ​​ссылка и инструкция
  3. Воссоздал PrjForm с нуля
  4. PrjForm в настоящее время находится в папке PrjTest, я попытался переместить его во внешнюю папку
  5. Загрузил решение на другой компьютер со свежей копией VS 2010

Я выполнил домашнее задание и слишком долго искал ответ в Интернете, но ни одно из решений пока не помогло.

Что еще я мог попробовать?

16 ответов

Решение

Смотрите этот вопрос.

Оказывается, это была проблема профилирования клиента.

PrjForm был установлен на ".Net Framework 4 Client Profile" Я изменил его на ".Net Framework 4", и теперь у меня есть успешная сборка.

Спасибо всем! Я полагаю, это показывает, что после всего этого времени, потраченного на поиск в Интернете, я нахожу решение через несколько минут после публикации, я думаю, что хитрость заключается в том, чтобы знать правильный вопрос, который нужно задать.

В моем случае у меня было:

Ссылочная DLL: .NET 4.5

Проект: .NET 4.0

Из-за вышеуказанного несоответствия проект 4.0 не мог видеть внутри пространства имен 4.5 .DLL. Я перекомпилировал.DLL для цели.NET 4.0, и я был в порядке.

PrjForm был установлен на ".Net Framework 4 Client Profile" Я изменил его на ".Net Framework 4", и теперь у меня есть успешная сборка.

Это сработало и для меня. Большое спасибо. Я пробовал пример RDF для dotNet, где я скачал комплект из dotnetrdf.

Профиль клиента NET4: всегда выбирайте профиль клиента NET4 для всех приложений на клиентском компьютере (включая приложения Windows Forms и WPF).

NET4 Full framework: Target NET4 Full, только если функции или сборки, которые нужны вашему приложению, не включены в профиль клиента. Это включает в себя: Если вы создаете серверные приложения, такие как:

  • ASP.Net приложения
  • Серверные веб-сервисы на основе ASMX

Если вы используете устаревшие клиентские сценарии, такие как: o Используйте System.Data.OracleClient.dll, которая устарела в NET4 и не включена в профиль клиента.

  • Используйте устаревшую версию Windows Workflow Foundation 3.0 или 3.5 (WF3.0, WF3.5)

Если вы нацелены на сценарии разработчика и вам нужен инструмент, такой как MSBuild, или вам нужен доступ к сборочным проектам, таким как System.Design.dll

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

Исходная ошибка:

frmTestPlanSelector.cs(11,7): error CS0246: The type or namespace name 'DatabaseManager' 
could not be found (are you missing a using directive or an assembly reference?) 

Далее в журнале я нашел это:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3275: The primary reference "[redacted]\DatabaseManager\bin\Release\DatabaseManager.dll" could not be resolved because it has an indirect dependency on the assembly "System.Data.SQLite, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" which was built against the ".NETFramework,Version=v4.5" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.0".

Решением было переустановить пакеты NuGet:

http://docs.nuget.org/docs/workflows/reinstalling-packages

Я решил свой, потому что другой проект был закодирован с.NET 4.5, а другой был закодирован 4.0

Оператор using относится к пространству имен, а не к проекту.

Убедитесь, что у вас есть правильно названное пространство имен в вашем проекте:

namespace PrjTest
{
     public class Foo
     {
          // etc...
     }
}

Узнайте больше о пространствах имен в MSDN:

Я столкнулся с этой проблемой, как оказалось.

Проект B ссылается на проект А.

Проект A скомпилирован как A.dll (имя сборки = A).

Проект B скомпилирован как A.dll (имя сборки A).

Visual Studio 2010 не уловил этого. Решарпер был в порядке, но не собирался. Дизайнер WinForms дал вводящее в заблуждение сообщение об ошибке, в котором говорится, что это может быть связано с несовместимостью целей платформы

Решение, после тяжелого дня, состояло в том, чтобы убедиться, что сборки не имеют одинакового названия.

Скомпилированная dll должна иметь публичный класс.

Также возможно, что указанные проекты нацелены на.NET 4.0, а проект консольного приложения нацелен на клиентскую библиотеку.NET 4.0.

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

Я была такая же проблема. Целевые рамки были хороши для меня. Тем не менее это не работает. Я установил VS2010 sp1 и произвел "Перестройку" на PrjTest. Тогда это начало работать для меня.

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

У меня было два проекта с конфигурациями, настроенными на определенные папки. подобно Debug а также Any CPU и во втором это было Debug а также x86,

Что я сделал, я пошел в Solution->Context menu->Properties->Configuration properties->Configuration и я настроил все мои проекты для использования одинаковых конфигураций Debug а также x86 а также проверил Build отметка

Затем проекты начали правильно собираться и могли видеть пространства имен.

Изменение основы на

Профиль клиента.NET Framework 4

сделал работу за меня.

Для ссылок COM/ActiveX VS 2012 будет отображать эту ошибку прямо при использовании оператора. Что довольно забавно, так как он говорит, что, возможно, вы упускаете оператор использования.

Чтобы решить эту проблему: зарегистрируйте фактическую DLL COM/ActiveX, даже если она находится в соседнем проекте, и добавьте ссылку через канал COM, а не канал проекта. Он добавит Interop.ProjectName вместо ProjectName в качестве ссылки, и это решит эту странную ошибку.

Только что изменил целевую платформу приложения на.Net Framework 4.

И ошибка исчезла.

удачи;:D

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

Включает ли проект (PrjTest) какие-либо классы или типы в пространство имен "PrjTest", которые являются общедоступными?

Проверьте свойства вашего проекта, ваши ссылочные пути должны быть пустыми, например:

Свойства проекта

С уважением

Другие вопросы по тегам