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

этот вопрос уже есть ответ здесь:

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

PrjForm ссылки PrjTest и PrjForm присвоен класс using о себе:

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

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

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

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

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

что еще можно попробовать?

16 ответов


посмотреть этот вопрос.

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

PrjForm было установлено в " профиль клиента .Net Framework 4" Я изменил его на ".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 в полной рамок: Цель net4 в полном объеме только если компоненты или сборки, необходимые вашему приложению, не включены в профиль клиента. Это включает: Если вы создаете серверные приложения, такие как:

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

при использовании устаревших сценариев клиента, таких как: o использовать систему.Данные.OracleClient.dll, которая устарела в NET4 и не включена в профиль клиента.

  • использование старых версий Windows Рабочий процесс Foundation 3.0 или 3.5 (WF3.0, WF3.5)

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


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

изначальная ошибка:

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


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

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


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

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

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

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

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

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


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

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

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

подробнее о пространствах имен в MSDN:


У меня была та же проблема. Целевые рамки были прекрасны для меня. И все же это не сработало. Я установил VS2010 sp1 и сделал" Перестроение " на PrjTest. Потом это начало работать на меня.


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


изменение структуры на

.NET Framework 4 Client Profile

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


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

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


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

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


просто изменил целевую платформу приложения на ".Net Framework 4".

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

удачи; : D


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

Project Properties

в отношении


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

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

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

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