Не удалось найти тип или имя пространства имен [дубликат]
этот вопрос уже есть ответ здесь:
- получение "тип или имя пространства имен не может быть найдено", но все кажется в порядке? 30 ответов
у меня есть C#
решение с несколькими проектами в Visual Studio 2010
.
Один из них-тестовый проект (я назову его"PrjTest"), другой (Я назовите это"PrjForm"). Существует также третий проект, на который ссылается PrjForm, который он может ссылаться и успешно использовать.
PrjForm ссылки PrjTest и PrjForm присвоен класс using
о себе:
using PrjTest;
- ссылка была правильно добавил
-
using
заявление правильно на месте - орфографических ошибок
- сборки PrjTest успешно
- PrjForm почти строит, но ломается на
using PrjTest;
строка с ошибкой:
не удалось найти имя типа или пространства имен "PrjTest" (отсутствует директива using или ссылка на сборку?)
Я пробовал следующее, чтобы решить эту проблему:
- удален Resharper (поскольку Resharper не имел проблем с распознаванием ссылочного проекта, я подумал, что это может стоить выстрела)
- удалена и повторно добавлена ссылка и инструкция using
- воссозданный PrjForm с нуля
- PrjForm в настоящее время находится внутри папки PrjTest, я попытался переместить его во внешнюю папку
- загрузил решение на другой компьютер со свежей копией
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:
также возможно, что указанные проекты нацелены на .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. Потом это начало работать на меня.
для ссылок COM / ActiveX VS 2012 покажет эту ошибку прямо при использовании инструкции. Что довольно забавно, так как он говорит, что, возможно, Вам не хватает оператора using.
чтобы решить эту проблему: зарегистрируйте фактическую dll COM / ActiveX, даже если она находится в соседнем проекте, и добавьте ссылку через канал COM, а не канал проекта. Это добавит взаимодействие.ProjectName вместо ProjectName в качестве ссылки, и это решает эту странную ошибку.
Если ваш проект (PrjTest) не предоставляет никаких открытых типов в PrjTest
пространство имен, это вызовет эту ошибку.
включает ли проект (PrjTest) какие-либо классы или типы в пространстве имен "PrjTest", которые являются общедоступными?
другой проблемой, которая может быть причиной такого поведения, являются конфигурации сборки.
у меня было два проекта с конфигурациями, установленными для создания определенных папок.
Как Debug
и Any CPU
и в секунду он был Debug
и x86
.
то, что я сделал, я пошел Solution->Context menu->Properties->Configuration properties->Configuration
и я установил все мои проекты, чтобы использовать те же конфигурации Debug
и x86
, а также Build
метки.
затем проекты начали строить правильно и смогли видеть пространство имен.