web-dev-qa-db-fra.com

Le type ou le nom de l'espace de noms est introuvable.

J'ai une solution C# avec plusieurs projets dans Visual Studio 2010. L'un est un projet test (je l'appellerai " PrjTest "), l'autre est un projet Windows Forms Application (je l'appellerai " PrjForm "). Il existe également un troisième projet référencé par PrjForm, qu’il est capable de référencer et d’utiliser avec succès.

PrjForm référence PrjTest , et PrjForm a une classe avec une instruction using:

using PrjTest;
  1. La référence a été correctement ajoutée
  2. La déclaration using est correctement en place
  3. L'orthographe est correcte
  4. PrjTest construit avec succès
  5. PrjForm construit presque, mais rompt sur la ligne using PrjTest; avec l'erreur:

Le nom de type ou d'espace de nom 'PrjTest' n'a pas été trouvé (il vous manque une directive using ou une référence Assembly?)

J'ai essayé ce qui suit pour résoudre ceci:

  1. Suppression de Resharper (Resharper n’ayant eu aucune difficulté à reconnaître le projet référencé, j’ai pensé que cela en valait la peine)
  2. Supprimé et rajouté la référence et l'instruction using
  3. PrjForm recréé à partir de zéro
  4. PrjForm réside actuellement dans le dossier PrjTest, j'ai essayé de le déplacer dans un dossier extérieur
  5. Charge la solution sur un autre ordinateur avec une nouvelle copie de VS 2010

J'ai fait mes devoirs et passé beaucoup trop de temps à chercher une réponse en ligne, aucune des solutions n'a encore aidé.

Que pourrais-je essayer d'autre?

445
Anders

Voir cette question .

Il s'avère que c'était un problème de profilage de client.

PrjForm a été défini sur "Profil client .Net Framework 4". Je l'ai changé en ".Net Framework 4", et maintenant, ma construction est réussie.

Merci tout le monde! Je suppose que cela signifie qu'après tout ce temps passé à chercher en ligne, je trouve la solution quelques minutes après l'envoi, le truc, c'est de connaître la bonne question à poser ..

695
Anders

Dans mon cas j'avais:

Référence DLL: .NET 4.5

Projet: .NET 4.0

En raison de la non-concordance ci-dessus, le projet 4.0 n'a pas pu voir à l'intérieur de l'espace de noms du fichier 4.5 .DLL. J'ai recompilé le .DLL pour cibler .NET 4.0 et j'allais bien.

48
DeepSpace101

PrjForm a été défini sur "Profil client .Net Framework 4". Je l'ai changé en ".Net Framework 4", et maintenant, ma construction est réussie.

Cela a fonctionné pour moi aussi. Merci beaucoup. J'essayais un exemple RDF pour dotNet dans lequel j'ai téléchargé le kit à partir de dotnetrdf.

Profil client NET4: ciblez toujours le profil client NET4 pour toutes vos applications de bureau client (y compris les applications Windows Forms et WPF).

NET4 Full framework: Target NET4 Full uniquement si les fonctionnalités ou les assemblages dont votre application a besoin ne sont pas inclus dans le profil du client. Cela inclut: Si vous créez des applications serveur, telles que:

  • Applications ASP.Net
  • Services Web ASMX côté serveur

Si vous utilisez des scénarios de client hérités, tels que: o Utilisez System.Data.OracleClient.dll qui est obsolète dans NET4 et non inclus dans le profil du client.

  • Utiliser l'ancienne version de Windows Workflow Foundation 3.0 ou 3.5 (WF3.0, WF3.5)

Si vous ciblez des scénarios de développeur et que vous avez besoin d'outils tels que MSBuild ou devez accéder à des assemblys de conception tels que System.Design.dll

39
Dee

Une autre chose qui peut causer cette erreur est d'avoir des paquets NuGet qui ont été construits avec une version plus récente de .NET.

L'erreur d'origine:

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

Plus loin dans le journal, j'ai trouvé ceci:

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

La solution consistait à réinstaller les packages NuGet:

http://docs.nuget.org/docs/workflows/reinstalling-packages

30
Miebster

J'ai résolu le mien parce que l'autre projet était codé avec .NET 4.5 et l'autre était codé 4.0

27
kurdapya

J'ai rencontré ce problème, il s'est avéré être.

Le projet B fait référence au projet A.

Projet A compilé en tant que A.dll (nom de l’ensemble = A).

Projet B compilé en tant que A.dll (nom de l’assemblage A).

Visual Studio 2010 ne comprenait pas cela. Resharper allait bien, mais ne compilait pas. Le concepteur WinForms a émis un message d'erreur trompeur indiquant qu'il est probable que des cibles de plate-forme incompatibles résultent.

Après une journée difficile, la solution était de s’assurer que les assemblées n’ont pas le même nom.

5

Il est également possible que les projets référencés ciblent .NET 4.0, tandis que le projet d'application console cible la bibliothèque client .NET 4.0.

Bien que cela n'ait peut-être pas été lié à ce cas particulier, je pense que quelqu'un d'autre peut trouver cette information utile.

4
Sebastian Zaklada

L'instruction using fait référence à un espace de noms et non à un projet .

Assurez-vous d'avoir l'espace de nom nommé de manière appropriée dans votre projet référencé:

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

En savoir plus sur les espaces de noms sur MSDN:

4
Mark Byers

J'ai eu le même problème. Les cadres cibles étaient bien pour moi. Cela ne fonctionnait toujours pas. J'ai installé VS2010 sp1 et fait un "Rebuild" sur le PrjTest. Ensuite, cela a commencé à fonctionner pour moi.

3
saju

La dll compilée devrait avoir la classe publique.

3
Peter

Pour les références COM/ActiveX, VS 2012 affichera cette erreur directement dans une instruction using. Ce qui est assez drôle, car il dit que peut-être vous manque une déclaration using.

Pour résoudre ce problème: enregistrez la DLL COM/ActiveX réelle même si elle se trouve dans le projet voisin et ajoutez une référence via le canal COM, et non pas le canal du projet. Il ajoutera Interop.ProjectName au lieu de ProjectName comme référence, ce qui résout ce problème étrange.

2
Rachel Henderson

Changer le cadre pour

 .NET Framework 4 Profil client 

a fait le travail pour moi.

2
Radix

vérifiez les propriétés de votre projet, vos chemins de référence doivent être vides comme ceci:

Project Properties

Cordialement

1
Luis Rodriguez

Un autre problème pouvant être à l'origine de ce problème est la configuration de la construction.

J'ai eu deux projets avec des configurations définies pour être construit à des dossiers spécifiques. Comme Debug et Any CPU et en second lieu c'était Debug et x86.

Ce que j’ai fait, j’ai accédé à Solution->Context menu->Properties->Configuration properties->Configuration et j’ai configuré tous mes projets pour qu’ils utilisent les mêmes configurations Debug et x86, et j’ai également coché la case Build.

Ensuite, les projets ont commencé à se construire correctement et ont été en mesure de voir les espaces de noms.

1
Mateusz

Si votre projet (PrjTest) n'expose aucun type public dans l'espace de noms PrjTest, cela provoquera cette erreur.

Le projet (PrjTest) inclut-il des classes ou des types dans l'espace de nommage "PrjTest" qui sont publics?

1
Reed Copsey

vient de changer le cadre cible de l'application en ".Net Framework 4".

Et l'erreur a disparu.

bonne chance; :RÉ