Не удалось найти имя типа или пространства имен
У меня есть решение 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
Я сделал домашнее задание и слишком долго искал ответ в Интернете, ни одно из решений не помогло.
Что еще я мог попробовать?
Ответы
Ответ 1
См. этот вопрос.
Оказывается, это была проблема профилирования клиента.
PrjForm был настроен на ".Net Framework 4 Client Profile"
Я изменил его на ".Net Framework 4", и теперь у меня есть успешная сборка.
Спасибо всем!
Думаю, это говорит о том, что после того, как все это время проводили поиск в Интернете, я нахожу решение через несколько минут после публикации, я думаю, что трюк знает правильный вопрос, чтобы спросить.
Ответ 2
PrjForm был настроен на ".Net Framework 4 Client Profile". Я изменил его на ".Net Framework 4", и теперь у меня есть успешная сборка.
Это сработало и для меня. Большое спасибо. Я пытался использовать пример RDF для dotNet, где я загрузил комплект из dotnetrdf.
Профиль клиента NET4:
Всегда настраивайте профиль клиента NET4 для всех ваших клиентских настольных приложений (включая приложения Windows Forms и WPF).
NET4 Полная структура:
Target NET4 Full, только если функции или сборки, которые необходимы вашему приложению, не включены в профиль клиента. Это включает:
Если вы создаете серверные приложения, например:
- Приложения ASP.Net
- Веб-службы на основе ASMX на стороне сервера.
Если вы используете устаревшие клиентские сценарии, такие как:
o Используйте System.Data.OracleClient.dll, который устарел в NET4 и не включен в профиль клиента.
- Использовать устаревший рабочий процесс Windows
Foundation 3.0 или 3.5 (WF3.0, WF3.5)
Если вы ориентируетесь на сценарии разработчиков и нуждаетесь в таком инструменте, как MSBuild, или вам нужен доступ к конструкторским сборкам, таким как System.Design.dll
Ответ 3
В моем случае у меня было:
Ссылка на DLL: .NET 4.5
Проект: .NET 4.0
Из-за вышеуказанного несоответствия проект 4.0 не смог увидеть внутри пространства имен 4.5.DLL. Я перекомпилировал .DLL для целевой .NET 4.0, и я был в порядке.
Ответ 4
Я решил мой, потому что другой проект был закодирован с .NET 4.5, а другой был закодирован 4.0
Ответ 5
Еще одна вещь, которая может вызвать эту ошибку, - это пакеты 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
Ответ 6
Также возможно, что указанные проекты нацелены на .NET 4.0, а Project Console Project - на клиентскую библиотеку .NET 4.0.
Хотя это, возможно, не было связано с этим конкретным случаем, я думаю, что кто-то еще может найти эту информацию полезной.
Ответ 7
Я столкнулся с этой проблемой, это оказалось.
Project B ссылается на проект A.
Проект A скомпилирован как A.dll(имя сборки = A).
Проект B скомпилирован как A.dll(имя сборки A).
Visual Studio 2010 не поймала этого. Решайер был в порядке, но не собирался. Дизайнер WinForms дал ошибочное сообщение об ошибке, которое, вероятно, было результатом несовместимых целей платформы.
Решение, после болезненного дня, состояло в том, чтобы убедиться, что сборки не имеют одинакового имени.
Ответ 8
Оператор using ссылается на пространство имен, а не на проект.
Удостоверьтесь, что в указанном проекте есть соответствующее пространство имен:
namespace PrjTest
{
public class Foo
{
// etc...
}
}
Подробнее о пространствах имен в MSDN:
Ответ 9
У меня была такая же проблема. Целевые рамки были хороши для меня. Тем не менее он не работал.
Я установил VS2010 sp1 и сделал "Rebuild" на PrjTest. Затем он начал работать для меня.
Ответ 10
Изменение рамки на
.NET Framework 4 Client Profile
выполнил эту работу для меня.
Ответ 11
Для ссылок COM/ActiveX VS 2012 будет показывать эту ошибку прямо при использовании оператора. Это довольно забавно, так как он говорит, что может быть, вы не используете инструкцию.
Чтобы решить эту проблему: зарегистрируйте фактическую DLL COM/ActiveX, даже если она находится в соседнем проекте, и добавьте ссылку через COM-канал, а не канал проекта. Он добавит Interop.ProjectName вместо ProjectName в качестве ссылки, и это решит эту странную ошибку.
Ответ 12
Скомпилированная dll должна иметь открытый класс.
Ответ 13
Если ваш проект (PrjTest) не предоставляет публичные типы в пространстве имен PrjTest
, это приведет к ошибке.
Включает ли проект (PrjTest) какие-либо классы или типы в пространстве имен PrjTest, которые являются общедоступными?
Ответ 14
только что изменил целевую структуру приложения на ".Net Framework 4".
И ошибка исчезла.
удачи;
: D
Ответ 15
Другой проблемой, которая может вызвать такое поведение, являются конфигурации сборки.
У меня было два проекта с настройками, которые должны быть созданы для определенных папок.
Как Debug
и Any CPU
, а во втором - Debug
и x86
.
Что я сделал, я пошел в Solution->Context menu->Properties->Configuration properties->Configuration
, и я решил, что все мои проекты будут использовать те же конфигурации Debug
и x86
, а также отмечен галочкой Build
.
Затем проекты начали правильно строить и смогли увидеть пространства имен.
Ответ 16
проверьте свои свойства проекта, ваши ссылочные пути должны быть пустыми:
![Project Properties]()
Привет