c# ref - Namespace non riconosciuto(anche se è lì)




in parameters (9)

Se la tua classe non si compila, anche se è 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 = compile

Sto ottenendo questo errore:

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

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

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

Ecco una schermata di uno:

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

Cosa mi manca?

Provai:

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

Altre idee?


Forse la tabella dei tipi del progetto è in uno stato errato. 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 mentre si utilizzava VS 2005, uno si aspetterebbe che MS abbia risolto quel problema particolare ormai ..


Verificare che il progetto non sia impostato per utilizzare il profilo client di .NET Framework 4.

È possibile controllare / modificare questo facendo clic con il pulsante 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 (che direi addirittura 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 propagherà al processo di compilazione quando la versione di .NET Framework per il progetto a cui si fa riferimento è superiore al progetto che crea il riferimento. Ad esempio, un progetto con il 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 esiste una spiegazione razionale del motivo per cui non si costruisce poiché il messaggio di errore indica di fare riferimento a un assembly a cui si è fatto chiaramente riferimento.


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

Il problema nella mia soluzione era legato 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.


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

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


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.


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


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


C'è un problema con l'inserimento di istruzioni all'interno dello spazio dei nomi quando si desidera utilizzare alias. L'alias non beneficia delle dichiarazioni precedenti e deve essere pienamente qualificato.

Tenere conto:

namespace MyNamespace
{
    using System;
    using MyAlias = System.DateTime;

    class MyClass
    {
    }
}

contro:

using System;

namespace MyNamespace
{
    using MyAlias = DateTime;

    class MyClass
    {
    }
}

Questo può essere particolarmente pronunciato se si ha un alias prolisso come il seguente (che è il modo in cui ho trovato il problema):

using MyAlias = Tuple<Expression<Func<DateTime, object>>, Expression<Func<TimeSpan, object>>>;

Con l' using istruzioni all'interno dello spazio dei nomi, diventa improvvisamente:

using MyAlias = System.Tuple<System.Linq.Expressions.Expression<System.Func<System.DateTime, object>>, System.Linq.Expressions.Expression<System.Func<System.TimeSpan, object>>>;

Non carino.





c# reference