2010-11-19 19 views
112

sto ottenendo questo errore:Namespace non riconosciuto (anche se è lì)

The type or namespace name 'AutoMapper' could not be found (are you missing a using directive or an assembly reference?)

La cosa divertente è che ho che di riferimento nel mio progetto già:

ProjectThatFails

E questo è il mio codice:

using System.Collections.Generic; 
using DataContract; 
using SelectorDAL; 
using AutoMapper; 

namespace SpecimenSelect 
{ 
    public class SpecimenSelect : ISpecimenSelect 
    { 
     public SpecimenSelect() 
     { 
      SetupMaps(); 
     } 

     private static void SetupMaps() 
     { 
      Mapper.CreateMap<SpecimenDetail, SpecimenDetailContract>(); 
     } 

L'altra cosa strana è che ho altri due p ROGETTI a mia soluzione che utilizzano entrambi automapper e fanno riferimento allo stesso file esatto AutoMapper.dll. Entrambi funzionano perfettamente bene.

Ecco una schermata di uno:

ProjectThatWorks

e qui è che il codice (che compila bene):

using System.Collections.Generic; 
using AutoMapper; 
using DataContract; 
using SelectorDAL; 

namespace PatientSelect 
{ 

    public class PatientSelect : IPatientSelect 
    { 
     public PatientSelect() 
     { 
      SetupMaps(); 
     } 

     private void SetupMaps() 
     { 
      Mapper.CreateMap<Patient, PatientContract>(); 
      Mapper.CreateMap<OrderedTest, OrderedTestsContract>(); 
      Mapper.CreateMap<Gender, GenderContract>(); 
     } 

Entrambi i riferimenti sembrano avere gli stessi dati sulle proprietà pagina.

Cosa mi manca?

ho provato:

  1. Il riavvio di Visual Studio
  2. Referencing senza istruzione using (cioè AutoMapper.Mapper.CreateMap)
  3. e ricostruire

Altre idee?

+1

è il percorso di riferimento non corretto? Forse è stato aggiunto con un percorso assoluto, ma la DLL è stata spostata da allora? – kevingessner

risposta

211

Controllare per accertarsi che il progetto non è configurato per utilizzare il profilo .NET Framework 4 Client.

È possibile controllare/cambiare questo facendo clic destro del progetto (non la soluzione), selezionare Proprietà ->applicazione - quadro>destinazione. Il framework di destinazione è un menu a discesa su quella pagina.

Questo è un problema in Visual Studio (Vorrei anche andare fino al punto di chiamarlo un bug). AutoMapper richiede assembly esclusi dal profilo del client .NET Framework 4. Poiché il tuo progetto sta usando quella versione del framework, si rompe.

Un errore simile si propaga al processo di generazione quando la versione di .NET Framework per il progetto si fa riferimento è superiore a quello del progetto di rinvio. Ad esempio, un progetto di targeting 4.5 che fa riferimento a un progetto che ha come target 4.5.1 ti darà lo stesso errore.

Deve esserci un messaggio di errore migliore quando ciò accade perché non vi è alcuna spiegazione razionale sul motivo per cui non si dovrebbe creare poiché il messaggio di errore indica di fare riferimento a un assieme a cui si fa chiaramente riferimento.

+6

Questo era esattamente il problema! Grazie! Sono d'accordo che questo errore è molto fuorviante. Inoltre non capisco perché il profilo cliente è l'impostazione predefinita per un nuovo progetto. La maggior parte dei computer avrà l'intero framework .net giusto? (Oppure MS ha appena messo il framework client su Windows Update?) In ogni caso, tutti i computer che ho sviluppato avranno il quadro completo. Mi piacerebbe che ci fosse un modo per cambiare l'impostazione predefinita per un nuovo progetto, così mi morde come in questo caso. Comunque. Grazie ancora! Ero bloccato e non pensavo di guardare lì. – Vaccano

+0

Grazie mille per la soluzione! – Zaffiro

+0

Ho avuto esattamente lo stesso problema! I tipi non sono stati riconosciuti nel mio progetto di servizio Windows anche se avessi aggiunto i riferimenti correttamente. Ho modificato il framework di destinazione da .NET Framework 4 Client Profile a .NET Framework 4. Si noti che ho dovuto aggiungere nuovamente i miei riferimenti per renderlo compilabile. Sembra essere un problema in Visual Studio 2010. Grazie e saluti da Budapest. –

25

domanda stupida: Potrebbe esserci due automapper.dll di?Uno con uno spazio dei nomi AutoMapper e uno senza? Conferma i percorsi in entrambi i progetti.

Ci sono stato ...

notato anche l'ordine del usando del è diverso. Non dovrebbe importare, ma hai provato a mescolarli?

+8

-1 Questa non è una domanda stupida ... In mancanza di trovare una soluzione, SO è lì per avere domande poste e soluzioni fornite per coloro che possono aver provato tutto ciò che pensano rilevanti. Se sei stato lì e conosci questi problemi, allora potresti sapere che questa non è una domanda stupida! Ci sono stato anche ... –

+0

Non pensavo così: perché i voti negativi? – n8wrl

+2

Domanda stupida? Io non la penso così Ho avuto lo stesso problema e mi ci è voluta un'ora per capire che dovevo cambiare il framework Target in Visual Studio da ".NET Framework 4 Client Profile" a ".NET Framework 4". – ChrisNel52

3

Forse la tabella dei tipi del progetto non è corretta. Vorrei provare a rimuovere/aggiungere il riferimento e se ciò non ha funzionato, creare un altro progetto, importare il mio codice e vedere se funziona.

mi sono imbattuto in questo durante l'utilizzo di VS 2005, ci si aspetterebbe MS aver risolto quel particolare problema, ormai però ..

+0

potresti risolvere questo problema? –

6

Ho un problema simile con riferimenti non essere riconosciuti in VS2010 e le risposte nel presente documento non sono stati in grado di correggerlo.

Il problema nella mia soluzione era correlato all'estensione del percorso in cui si trovava il progetto di riferimento. Mentre lavoro con SVN, ho creato un ramo di un repository per fare alcuni test e quel ramo ha aumentato due livelli nella struttura del percorso, quindi il percorso è diventato troppo lungo per essere utilizzabile in Windows. Questo non ha generato alcun errore ma non ha riconosciuto lo spazio dei nomi del riferimento del progetto. Quando correggo la posizione del progetto per avere un percorso più piccolo, tutto è andato bene.

+2

Questo era un problema anche per noi ed era la lunghezza del percorso che causava il problema. VS ha bisogno di fare un lavoro migliore per dare un errore migliore in quel caso, perché l'errore che abbiamo ottenuto è stato piuttosto fuorviante. – VoodooChild

14

Se la classe non compila, anche se è nel progetto controllare questi:

  1. se il nome della classe è esattamente la stessa
  2. se lo spazio nome è esattamente gli stessi
  3. se le proprietà di classe show build action = compile
+5

Ho copiato un file .cs con Explorer e l'ho incluso nel progetto. VS.Net imposta l'azione di compilazione come "Contenuto" invece di "Compila" e quindi non riconosceva lo spazio dei nomi. Buona pesca! – AUSteve

+3

build action = compilare era il mio problema !!! Grazie!!!!!!! – pashute

+0

Ho aggiunto la classe tramite la funzione Aggiungi -> Classe e ha impostato l'azione di creazione sul contenuto. Solo curioso di sapere perché? Questo mi ha aiutato comunque, qualcosa di così semplice, ma mai incontrato prima. Questo è il motivo per cui non mi sono nemmeno preoccupato di guardare lì, e ho cercato su Google invece. – Anomaly

4

Nel mio caso, la dll di riferimento è stata creata nella versione superiore di .Net Framework. Dopo aver aggiunto il riferimento, potrei usarlo. Ma non appena ho fatto una build, comparirà l'errore 'missing reference'. Aggiorna la DLL, ma l'errore non verrà generato. Questo post mi ha fatto verificare la versione del framework e quindi ho potuto risolverlo costruendo il progetto di riferimento nella stessa versione.

2

La questione è già stato assegnato, ma ci sono ulteriori dettagli non sono ancora descritte che devono essere controllati.

Anche io stavo avendo questo comportamento, dove il progetto B è stato referenziato nel progetto A, ma lo spazio dei nomi del progetto B non è stato riconosciuto nel progetto A. Dopo alcuni scavi, ho scoperto che il mio percorso era troppo lungo. Riducendo il percorso dei progetti (sia A che B) i riferimenti sono diventati visibili e disponibili.

Ho testato questa teoria creando il progetto C con una profondità di percorso molto inferiore. Ho fatto riferimento al progetto C nel progetto A. I riferimenti hanno funzionato correttamente come previsto. Ho quindi rimosso il progetto C dalla soluzione, semplicemente spostato il progetto C in un percorso profondo, lo stesso del progetto B, e aggiunto il progetto C alla soluzione e ho tentato di compilare. Non ho più avuto visibilità per proiettare oggetti C più a lungo.

0

Ho affrontato il problema analogo di namespace/metodo non trovato durante l'esecuzione sebbene fosse soddisfacente durante la compilazione e il motivo per questo sembra essere che l'assembly a cui facevo riferimento era distribuito a GAC ​​e da allora è stato modificato, quindi quando Ho fatto riferimento all'assembly in Visual Studion che utilizzava il più recente, ma durante il runtime era stata utilizzata la versione per GAC.

1

Nel mio caso avevo copiato un ClassLibrary, e non è cambiato il "Nome assembly" nelle proprietà del progetto, in modo da una DLL è stata sovrascrive l'altra ...

+0

se è il tuo caso, basta cambiare il "Nome Assemblaggio" nelle proprietà del progetto .. –

0

Ho risolto questo problema facendo clic destro sulla cartella contenente i file e scegliendo Escludi dal progetto e poi a destra cliccando nuovamente e selezionando includere nel progetto

Problemi correlati