c# all'assembly - Il tipo o il nome dello spazio dei nomi non possono essere trovati




manca file (14)

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?


Answers

Ho avuto lo stesso problema. I quadri di riferimento andavano bene per me. Ancora non funzionava. Ho installato VS2010 sp1 e ho fatto una "ricostruzione" sul PrjTest. Poi ha iniziato a lavorare per me.


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.


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


Cambiare la struttura in

.NET Framework 4 Client Profile

ha fatto il lavoro per me


controlla le proprietà del tuo progetto, i tuoi percorsi di riferimento dovrebbero essere vuoti come questo:

Saluti


La dll compilata dovrebbe avere public Class.


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.


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 riscontrato questo problema che si è rivelato essere.

Il Progetto B fa riferimento al Progetto A.

Progetto A compilato come A.dll (nome assembly = A).

Progetto B compilato come A.dll (nome assembly A).

Visual Studio 2010 non stava prendendo questo. Resharper andava bene, ma non si sarebbe compilato. Il progettista di WinForms ha fornito un messaggio di errore fuorviante che diceva che probabilmente derivava da bersagli della piattaforma incompatibili.

La soluzione, dopo una giornata dolorosa, era assicurarsi che gli assembly non avessero lo stesso nome.


PrjForm è stato impostato su ".Net Framework 4 Client Profile" l'ho cambiato in ".Net Framework 4", e ora ho una build di successo.

Questo ha funzionato anche per me. Molte grazie. Stavo cercando un esempio RDF per dotNet dove ho scaricato il kit di dotnetrdf.

Profilo client NET4: indirizzare sempre il profilo client NET4 per tutte le applicazioni desktop client (incluse le app Windows Form e WPF).

NET4 Full framework: Target NET4 Full solo se le funzionalità o gli assembly necessari alla tua app non sono inclusi nel profilo del cliente. Questo include: Se stai creando app server, come:

  • App ASP.Net
  • Servizi Web basati su ASMX lato server

Se si utilizzano scenari client legacy, ad esempio: o Utilizzare System.Data.OracleClient.dll che è deprecato in NET4 e non incluso nel profilo client.

  • Utilizzare legacy Windows Workflow Foundation 3.0 o 3.5 (WF3.0, WF3.5)

Se hai scelto come target gli scenari di sviluppo e hai bisogno di strumenti come MSBuild o hai bisogno di accedere agli assembly di progettazione come System.Design.dll


Ho risolto il mio perché l'altro progetto era codificato con .NET 4.5 e l'altro era codificato 4.0


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


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:


Prova a impostare Silverlight Application Project come progetto di avvio: fai clic destro sul progetto -> 'Imposta come progetto di avvio. Quindi premere F5 e vedere se è possibile rilevare i punti di interruzione ...

Prova ad eliminare i dati di navigazione / temporanei nel tuo browser ogni volta che apporti modifiche all'applicazione Silverlight





c# visual-studio-2010 reference using-statement using-directives