Не удалось найти имя типа или пространства имен
У меня есть C#
решение с несколькими проектами в Visual Studio 2010
, Один - это тестовый проект (я назову его "PrjTest"), другой - Windows Forms Application
проект (я назову это "PrjForm"). Существует также третий проект, на который ссылается PrjForm, на который он может ссылаться и успешно использовать.
PrjForm ссылается на PrjTest, а PrjForm имеет класс с using
заявление:
using PrjTest;
- Ссылка была правильно добавлена
using
заявление правильно на месте- Орфография правильная
- PrjTest строит успешно
- PrjForm почти строит, но ломает на
using PrjTest;
строка с ошибкой:
Не удалось найти тип или имя пространства имен "PrjTest" (отсутствует директива using или ссылка на сборку?)
Я пробовал следующее, чтобы решить эту проблему:
- Удален Resharper (поскольку Resharper без труда распознал указанный проект, я подумал, что это может стоить того)
- Удалена и повторно добавлена ссылка и инструкция
- Воссоздал PrjForm с нуля
- PrjForm в настоящее время находится в папке PrjTest, я попытался переместить его во внешнюю папку
- Загрузил решение на другой компьютер со свежей копией
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:
Я решил свой, потому что другой проект был закодирован с.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 дал вводящее в заблуждение сообщение об ошибке, в котором говорится, что это может быть связано с несовместимостью целей платформы
Решение, после тяжелого дня, состояло в том, чтобы убедиться, что сборки не имеют одинакового названия.
Также возможно, что указанные проекты нацелены на.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", которые являются общедоступными?
Проверьте свойства вашего проекта, ваши ссылочные пути должны быть пустыми, например:
С уважением