c# manca una - Il tipo o il nome dello spazio dei nomi non possono essere trovati





8 Answers

Nel mio caso ho avuto:

DLL di riferimento: .NET 4.5

Progetto: .NET 4.0

A causa della mancata corrispondenza sopra riportata, il progetto 4.0 non è riuscito a vedere all'interno dello spazio dei nomi del file .DLL 4.5. Ho ricompilato il .DLL per il target .NET 4.0 e stavo bene.

direttiva using riferimento

Questa domanda ha già una risposta qui:

Ho una soluzione C# con diversi progetti in Visual Studio 2010 . Uno è un progetto di test (lo chiamerò " PrjTest "), l'altro è un progetto di Windows Forms Application (lo chiamerò " PrjForm "). C'è anche un terzo progetto a cui fa riferimento PrjForm, che è in grado di fare riferimento e utilizzare con successo.

PrjForm fa riferimento a PrjTest e PrjForm ha una classe con un'istruzione using :

using PrjTest;
  1. Il riferimento è stato aggiunto correttamente
  2. using dichiarazione è correttamente in atto
  3. L'ortografia è corretta
  4. PrjTest costruisce con successo
  5. PrjForm quasi costruisce, ma rompe using PrjTest; allineare con l'errore:

Non è stato possibile trovare il nome dello spazio dei nomi 'PrjTest' (manca una direttiva using o un riferimento all'assembly?)

Ho provato quanto segue per risolvere questo:

  1. Rimosso Resharper (dal momento che Resharper non ha avuto problemi nel riconoscere il progetto di riferimento, ho pensato che valesse la pena provare)
  2. Rimosso e aggiunto nuovamente il riferimento e l'istruzione using
  3. Ricreato PrjForm da zero
  4. PrjForm risiede attualmente nella cartella PrjTest, ho provato a spostarlo in una cartella esterna
  5. Ha caricato la soluzione su un altro computer con una nuova copia di VS 2010

Ho fatto i miei compiti e ho speso troppo a lungo in cerca di una risposta online, nessuna delle soluzioni ha ancora aiutato.

Cos'altro potrei provare?




Un'altra cosa che può causare questo errore è avere pacchetti NuGet che sono stati creati con una versione più recente di .NET.

L'errore originale:

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

Più in alto nel registro ho trovato questo:

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 soluzione era reinstallare i pacchetti NuGet:

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




È anche possibile che i progetti di riferimento siano indirizzati a .NET 4.0, mentre il progetto app della console è destinato alla libreria client .NET 4.0.

Anche se potrebbe non essere stato correlato a questo caso particolare, penso che qualcun altro possa trovare utile questa informazione.




L'istruzione using fa riferimento a uno spazio dei nomi , non a un progetto .

Assicurati di avere lo spazio dei nomi opportunamente chiamato nel tuo progetto di riferimento:

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

Maggiori informazioni su namespace su MSDN:




La dll compilata dovrebbe avere public Class.




Per i riferimenti COM / ActiveX, VS 2012 mostrerà questo errore sull'utilizzo dell'istruzione. Il che è piuttosto divertente, dal momento che sta dicendo che potrebbe mancare una dichiarazione using.

Per risolvere questo: registrare la DLL effettiva COM / ActiveX anche se si trova nel progetto adiacente e aggiungere un riferimento tramite il canale COM, non il canale di progetto. Aggiungerà Interop.ProjectName invece di ProjectName come riferimento e questo risolve questo strano bug.




ho appena cambiato il framework di destinazione dell'applicazione in ".Net Framework 4".

E l'errore è scomparso.

in bocca al lupo; : D




Altri problemi che potrebbero causare questo tipo di comportamento sono configurazioni di build.

Avevo due progetti con le configurazioni configurate per essere costruite in cartelle specifiche. Come Debug e Any CPU e in secondo era Debug e x86 .

Quello che ho fatto sono andato a Solution->Context menu->Properties->Configuration properties->Configuration e ho impostato tutti i miei progetti per utilizzare le stesse configurazioni Debug e x86 e anche spuntato il segno di spunta Build .

Quindi i progetti iniziarono a essere compilati correttamente e furono in grado di vedere i namespace.






Related