Spazio dei nomi non riconosciuto (anche se è lì)


145

Ricevo questo errore:

Impossibile trovare il nome del tipo o dello spazio dei nomi "AutoMapper" (manca una direttiva che utilizza o un riferimento di assembly?)

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

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 progetti nella mia soluzione che utilizzano sia AutoMapper e fanno riferimento allo stesso file AutoMapper.dll. Entrambi funzionano perfettamente bene.

Ecco una schermata di uno:

ProjectThatWorks

ed ecco quel codice (che si 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 nella pagina delle proprietà.

Cosa mi sto perdendo?

Provai:

  1. Riavvio di Visual Studio
  2. Riferimenti senza un'istruzione using (es. AutoMapper.Mapper.CreateMap)
  3. Pulisci e ricostruisci

Altre idee?


1
Il percorso di riferimento è errato? Forse è stato aggiunto con un percorso assoluto, ma da allora la DLL è stata spostata?
kevingessner,

Risposte:


259

Verificare che il progetto non sia impostato per l'utilizzo del profilo client .NET Framework 4.

È possibile controllare / modificare questo facendo clic con il tasto destro del mouse sul progetto (non sulla soluzione), selezionare Proprietà -> Applicazione -> Framework di destinazione . Il framework di destinazione è un menu a discesa su quella pagina.

Questo è un problema in Visual Studio (arriverei persino a chiamarlo un bug). AutoMapper richiede assembly esclusi dal profilo client di .NET Framework 4. Poiché il tuo progetto utilizza quella versione del framework, si rompe.

Un errore simile si propagherà al processo di compilazione quando la versione di .NET Framework per il progetto a cui si fa riferimento è superiore a quella del progetto che effettua il riferimento. vale a dire un progetto con targeting 4.5 che fa riferimento a un progetto con targeting 4.5.1 ti darà lo stesso errore.

È necessario un messaggio di errore migliore quando ciò accade perché non esiste una spiegazione razionale sul perché non si crei poiché il messaggio di errore indica di fare riferimento a un assembly a cui si fa chiaramente riferimento.


7
Questo era esattamente il problema! Grazie! Sono d'accordo che questo errore è molto fuorviante. Inoltre non capisco perché il profilo client sia predefinito per un nuovo progetto. La maggior parte dei computer avrà il framework .net completo, giusto? (O MS ha appena impostato il framework client su Windows Update?) Ad ogni modo, tutti i computer per cui sviluppo avranno il framework completo. Vorrei che ci fosse un modo per cambiare il valore predefinito per un nuovo progetto, quindi mi morde in questo modo. Comunque. Grazie ancora! Ero bloccato e non pensavo di guardare lì.
Vaccano,

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

Bene, questo è successo anche a me. Il mio progetto di test non ha riconosciuto gli spazi dei nomi di riferimento anche se erano lì. Questo perché ho cambiato la mia libreria sulla piattaforma .NET 4.5 ma il progetto di test è rimasto come 4.0. In ogni caso, la tua risposta mi porta sulla strada giusta. Grazie per averlo capito.
Jukka Puranen,

Ho riscontrato lo stesso problema quando ho cercato di utilizzare l'assemblaggio .Net 2.0 nel progetto di profilo client .Net 3.5. e il passaggio al profilo completo 3.5 risolve il problema.
Palani,

Il mio problema era simile. I progetti utilizzavano diverse versioni di Framework. Il progetto principale utilizzava 4.5 e il progetto appena creato utilizzava 4.5.1. Sarebbe bello se il messaggio di errore fosse migliore.
L_7337,

27

Consentitemi di porre una domanda stupida: potrebbero esserci due file automapper.dll ? Uno con uno AutoMapperspazio dei nomi e uno senza? Conferma i percorsi in entrambi i progetti.

Ho anche notato che l'ordine dei usingcomandi è diverso. Non dovrebbe importare, ma hai provato a mescolarli?


18

Se la tua classe non viene compilata, anche se si trova nel progetto, controlla questi:

  1. se il nome della classe è esattamente lo stesso
  2. se lo spazio dei nomi è esattamente lo stesso
  3. se le proprietà della classe mostrano build action = compilare

6
Ho copiato un file .cs con Explorer e poi l'ho incluso nel progetto. VS.Net imposta l'azione di compilazione come "Contenuto" anziché "Compila" e quindi non riconosce lo spazio dei nomi. Buona pesca!
AUSteve,

1
Ho aggiunto la classe tramite la funzione Aggiungi -> Classe e imposta l'azione di compilazione sul contenuto. Solo curioso di sapere perché? Questo mi ha aiutato comunque, qualcosa di così semplice, ma mai incontrato prima. Ecco perché non mi sono nemmeno preoccupato di guardare lì, e invece ho cercato su Google.
Anomalia,

14

Questa deve essere la soluzione più semplice se tutte le altre risposte non ti aiutano

Stavo cercando ciò che non andava nella mia configurazione tra le risposte, ho provato tutte - nessuna ha funzionato, poi ho realizzato che Visual Studio 2018 è stato sviluppato da Microsoft . Quindi ho fatto quello che fanno molte persone,

Riavviato Visual Studio e ha funzionato


Ha funzionato per me ma ha eliminato la cartella bin e obj prima di riavviare.
Chandan YS

In tutti i miei anni su StackOverflow, questa è la migliore risposta salata a un bug (che in realtà fornisce una soluzione) e ha funzionato al primo riavvio. ftw insonne!
Collin White,

12

Ho risolto questo problema facendo clic con il pulsante destro del mouse sulla cartella contenente i file e scegliendo Escludi dal progetto, quindi facendo nuovamente clic con il pulsante destro del mouse e selezionando Includi nel progetto (è necessario prima abilitare Mostra tutti i file per rendere visibile la cartella esclusa)


Ho avuto questo errore per tonnellate di file, basta rimuoverne uno e includerlo nuovamente per risolvere il problema per l'intera soluzione.
Daryl,

Cliccando col tasto destro su cosa? "Escludi dal progetto" rimuove la cartella da Esplora soluzioni. Non esiste "Includi nel progetto"
Florian Winter,

2
@FlorianWinter Per fare clic con il pulsante destro del mouse sulla cartella esclusa, è necessario attivare Mostra tutti i file . Questo può essere attivato tramite Esplora soluzioni, si trova accanto al pulsante Comprimi tutto .
user3251328,

Non so perché, ma ha funzionato in VS2019 quando ho aggiunto un nuovo file contenente una nuova classe a un progetto, ma non sono riuscito a creare una nuova istanza di quella classe in un altro progetto che aveva già un riferimento al progetto contenente la nuova classe. ..¯\_(ツ)_/¯
matt.fc

7

Ho un problema simile con i riferimenti non riconosciuti in VS2010 e le risposte qui non sono state in grado di correggerlo.

Il problema nella mia soluzione era legato all'estensione del percorso in cui si trovava il progetto referenziato. Mentre lavoro con SVN, ho creato un ramo di un repository per eseguire alcuni test e quel ramo ha aumentato due livelli nella struttura del percorso, quindi il percorso è diventato troppo lungo per essere utilizzabile in Windows. Ciò 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 è stato un problema anche per noi ed è stata la lunghezza del percorso a causare il problema. VS ha bisogno di fare un lavoro migliore nel dare un errore migliore in quel caso poiché l'errore che abbiamo riscontrato è stato piuttosto fuorviante.
VoodooChild,

Grazie alla tua risposta mi è venuta in mente un'idea. Ho esaminato il percorso del mio progetto e ho capito che la cartella principale, quella creata dall'albero dei sorgenti, aveva "% 20" anziché _ nel nome. L'ho cambiato in _ e ora funziona tutto bene.
Fernando Wolff,

5

Nel mio caso, la dll di riferimento è stata compilata nella versione successiva di .Net Framework. Dopo aver aggiunto il riferimento, potrei usarlo. Ma non appena ho fatto una build, verrà visualizzato l'errore "riferimento mancante". Aggiorna la dll l'errore andrà ma non si costruirà mai. Questo post mi ha fatto controllare la versione del framework e quindi ho potuto risolverlo costruendo il progetto di riferimento nella stessa versione.


3

Forse la tabella dei tipi del progetto è in uno stato errato. Vorrei provare a rimuovere / aggiungere il riferimento e, se 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 che MS abbia risolto quel particolare problema ormai ..


potresti risolvere questo problema?
Fran_gg7,

3

La domanda è già stata assegnata, ma ci sono ulteriori dettagli non ancora descritti che devono essere verificati.

Anch'io stavo avendo questo comportamento, in cui 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à del 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, ho semplicemente spostato il progetto C in un percorso profondo, lo stesso del progetto B, e ho aggiunto il progetto C alla soluzione, e ho provato a compilare. Quindi non avevo più visibilità per proiettare oggetti C in più.


2

Nel mio caso avevo copiato un classlibrary e non ho cambiato il "Nome assembly" nelle proprietà del progetto, quindi una DLL stava sovrascrivendo l'altra ...


2

Questo mi è successo in Visual Studio 2019. Per me, stavo cercando di fare riferimento a un altro progetto nella mia soluzione. Ecco i passaggi che ho preso nel caso in cui aiuti qualcun altro:

  1. Assicurato che il progetto a cui volevo fare riferimento fosse elencato sotto Riferimenti
  2. Garantito che entrambi i progetti utilizzavano la versione corretta di .NET Framework
  3. Costruito il progetto (cliccato sulla freccia verde "Start")

Ero confuso perché stavo ancora ricevendo l'errore dopo i passaggi 1 e 2, ma la costruzione del progetto sembrava risolverlo.


1

Ho riscontrato un problema simile di spazio dei nomi / metodo non trovato durante l'esecuzione anche se andava bene durante la compilazione, e la ragione di ciò sembra essere che l'assembly a cui facevo riferimento è stato distribuito a GAC ​​e da allora è stato modificato, quindi quando ho fatto riferimento all'assembly in Visual Studion utilizzava la più recente, ma durante il runtime era stata utilizzata la versione di GAC.


1

Nel mio caso ho ricevuto l'errore solo in VS 2015. All'apertura del progetto in VS 2017 l'errore era sparito.


1

Pazzo. Lo so.

Ho provato tutte le opzioni qui. Riavvio, pulizia, controllo manuale nelle DLL generate (questo ha un valore inestimabile per capire se è effettivamente te stesso che ha incasinato).

Ho funzionato impostando Verbosity di MSBuild su "Dettagliato" in Opzioni.


per me era una configurazione di build impostata su AnyCpu su PlatformTarget quando il nome della configurazione era x86. Questa impostazione mi ha aiutato a scoprirlo.
Doppio

1

A questa domanda è già stata data risposta per il poster originale, ma nel caso in cui qualcuno lo incontri in un progetto MS-Test:

da Visual Studio, fare clic sul menu Test -> Impostazioni test -> Architettura processore predefinita e assicurarsi che l'architettura corrisponda a quella dell'altro assembly a cui si fa riferimento. Se l'altro assieme è x64 e le impostazioni del test sono x86, è possibile che si verifichino i sintomi del poster originale.


0

Stavo lavorando al progetto Xamarin e, come sempre, l'eliminazione della cartella obj e la ricostruzione hanno risolto il mio problema, lo spazio dei nomi che il mio VS non riconosceva era un codice nel mio progetto BTW



0

Ho avuto un problema simile, che ha richiesto un po 'di risoluzione, quindi ho pensato di condividerlo:

Lo spazio dei nomi che non è stato possibile risolvere nel mio caso era Company.Project.Common.Models.EF . Avevo aggiunto un file in un nuovo spazio dei nomi Company.Project.BusinessLogic.Common .

La maggior parte dei file aveva un

using Company.Project;

E quindi facendo riferimento ai modelli come Common.Models.EF . Tutti i file che avevano anche un

using Company.Project.BusinessLogic;

Si sono verificati errori poiché VS non è stato in grado di determinare quale spazio dei nomi utilizzare.

La soluzione è stata quella di cambiare il secondo spazio dei nomi in Company.Project.BusinessLogic.CommonServices


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.