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



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



у меня есть 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


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



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

825   16  

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

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

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

Если вы ориентируетесь на сценарии разработчика и вам нужен инструмент, такой как MSBuild, или вам нужен доступ к конструкторским сборкам, таким как System.Дизайн.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:

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).

Проект Б составлен по состоянию A.dll (название сборки).

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

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

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

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

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

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

У меня была та же проблема. Целевые рамки были прекрасны для меня. И все же это не сработало. Я установил VS2010 с пакетом обновления 1, и сделали "восстановить" на 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 метки.

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

Comments

    Ничего не найдено.