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

У меня есть решение 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

Привет