Namespace nicht erkannt (obwohl er vorhanden ist)

145

Ich erhalte diesen Fehler:

Der Typ- oder Namespace-Name 'AutoMapper' wurde nicht gefunden (fehlt Ihnen eine using-Direktive oder eine Assembly-Referenz?)

Das Lustige ist, dass ich diese Referenz bereits in meinem Projekt habe:

ProjectThatFails

Und das ist mein Code:

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>();
        }

Die andere seltsame Sache ist, dass ich zwei andere Projekte in meiner Lösung habe, die beide AutoMapper verwenden und auf genau dieselbe AutoMapper.dll-Datei verweisen. Sie funktionieren beide einwandfrei.

Hier ist ein Screenshot von einem:

ProjectThatWorks

und hier ist dieser Code (der gut kompiliert):

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>();
        }

Beide Referenzen scheinen dieselben Daten auf der Eigenschaftenseite zu haben.

Was vermisse ich?

Ich habe es versucht:

  1. Visual Studio neu starten
  2. Referenzieren ohne using-Anweisung (dh AutoMapper.Mapper.CreateMap)
  3. Reinigen und neu aufbauen

Irgendwelche anderen Ideen?

Vaccano
quelle
1
Ist der Referenzpfad falsch? Vielleicht wurde es mit einem absoluten Pfad hinzugefügt, aber die DLL wurde inzwischen verschoben?
Kevingessner

Antworten:

259

Stellen Sie sicher, dass Ihr Projekt nicht für die Verwendung des .NET Framework 4-Clientprofils eingerichtet ist.

Sie können dies überprüfen / ändern, indem Sie mit der rechten Maustaste auf Ihr Projekt (nicht auf die Lösung) klicken und Eigenschaften -> Anwendung -> Zielframework auswählen . Das Ziel-Framework ist ein Dropdown-Menü auf dieser Seite.

Dies ist ein Problem in Visual Studio (ich würde es sogar als Fehler bezeichnen). AutoMapper erfordert Assemblys, die vom .NET Framework 4-Clientprofil ausgeschlossen sind. Da Ihr Projekt diese Version des Frameworks verwendet, bricht es.

Ein ähnlicher Fehler wird auf den Erstellungsprozess übertragen, wenn die .NET Framework-Version für das Projekt, auf das Sie verweisen, höher ist als das Projekt, auf das verwiesen wird. Das heißt, ein Projekt-Targeting 4.5, das auf ein Projekt-Targeting 4.5.1 verweist, gibt denselben Fehler aus.

In diesem Fall muss eine bessere Fehlermeldung angezeigt werden, da es keine rationale Erklärung dafür gibt, warum sie nicht erstellt wird, da Sie in der Fehlermeldung aufgefordert werden, auf eine Assembly zu verweisen, auf die Sie eindeutig verwiesen haben.

Andrew Hare
quelle
7
Genau das war das Problem! Danke! Ich stimme zu, dass dieser Fehler sehr irreführend ist. Ich verstehe auch nicht, warum das Kundenprofil die Standardeinstellung für ein neues Projekt ist. Die meisten Computer werden das vollständige .net-Framework haben, oder? (Oder setzt MS das Client-Framework nur auf Windows Update?) Auf jeden Fall verfügen alle Computer, für die ich entwickle, über das vollständige Framework. Ich wünschte, es gäbe eine Möglichkeit, die Standardeinstellung für ein neues Projekt zu ändern, damit es mich so beißt. Wie auch immer. Danke noch einmal! Ich steckte fest und dachte nicht daran, dorthin zu schauen.
Vaccano
Ich hatte genau das gleiche Problem! Die Typen wurden in meinem Windows-Serviceprojekt nicht erkannt, selbst wenn ich die Referenzen korrekt hinzugefügt hatte. Ich habe das Zielframework von .NET Framework 4-Clientprofil in .NET Framework 4 geändert. Beachten Sie, dass ich auch meine Referenzen erneut hinzufügen musste, um es kompilieren zu können. Scheint ein Problem in Visual Studio 2010 zu sein. Danke und Grüße aus Budapest.
Varga Tamas
Gut, das ist mir auch passiert. Mein Testprojekt hat referenzierte Namespaces nicht erkannt, obwohl sie dort waren. Dies lag daran, dass ich meine Bibliothek auf die .NET 4.5-Plattform geändert habe, das Testprojekt jedoch weiterhin 4.0 war. Ihre Antwort hat mich auf jeden Fall auf den richtigen Weg gebracht. Danke, dass du das herausgefunden hast.
Jukka Puranen
Ich hatte das gleiche Problem, als ich versuchte, die .Net 2.0-Assembly in einem .Net 3.5-Clientprofilprojekt zu verwenden. und das Wechseln zu 3.5 Vollprofil lösen das Problem.
Palani
Mein Problem war ähnlich. Die Projekte verwendeten verschiedene Framework-Versionen. Das Hauptprojekt verwendete 4.5 und das neu erstellte Projekt 4.5.1. Es wäre schön, wenn die Fehlermeldung besser wäre.
L_7337
27

Lassen Sie mich eine dumme Frage stellen: Könnte es zwei automapper.dll- Dateien geben? Einer mit einem AutoMapperNamespace und einer ohne? Bestätigen Sie die Pfade in beiden Projekten.

Mir ist auch aufgefallen, dass die Reihenfolge der usingBefehle unterschiedlich ist. Es sollte keine Rolle spielen, aber haben Sie versucht, sie zu mischen?

n8wrl
quelle
18

Wenn Ihre Klasse nicht kompiliert wird, auch wenn sie sich im Projekt befindet, überprüfen Sie diese:

  1. ob der Klassenname genau gleich ist
  2. ob der Namensraum genau gleich ist
  3. ob Klasseneigenschaften build action = compile anzeigen
Anonym
quelle
6
Ich habe eine CS-Datei mit dem Explorer kopiert und sie dann in das Projekt aufgenommen. VS.Net hat die Build-Aktion als "Inhalt" anstelle von "Kompilieren" festgelegt und den Namespace daher nicht erkannt. Guter Fang!
AUSteve
1
Ich habe die Klasse über die Funktion Hinzufügen -> Klasse hinzugefügt und die Erstellungsaktion auf Inhalt gesetzt. Nur neugierig warum? Das hat mir trotzdem geholfen, etwas so Einfaches, aber noch nie zuvor angetroffenes. Deshalb habe ich mich nicht einmal darum gekümmert und stattdessen gegoogelt.
Anomalie
14

Dies muss die einfachste Lösung sein, wenn Ihnen alle anderen Antworten nicht helfen

Ich habe unter den Antworten gesucht, was mit meinem Setup nicht stimmt. Ich habe alle ausprobiert - keine hat funktioniert. Dann habe ich festgestellt, dass Visual Studio 2018 von Microsoft entwickelt wurde . Also habe ich getan, was die meisten Leute tun,

Visual Studio neu gestartet und es hat funktioniert

Schlaflosigkeit
quelle
Hat für mich funktioniert, aber den Ordner bin und obj vor dem Neustart gelöscht.
Chandan YS
In all meinen Jahren mit Stackoverflow ist dies die beste salzige Reaktion auf einen Fehler (der tatsächlich eine Lösung bietet) und hat beim ersten Neustart funktioniert. Schlaflosigkeit ftw!
Collin White
12

Ich habe dieses Problem behoben, indem ich mit der rechten Maustaste auf den Ordner mit den Dateien geklickt und Aus Projekt ausschließen und dann erneut mit der rechten Maustaste geklickt und In Projekt einschließen ausgewählt habe (Sie müssen zuerst Alle Dateien anzeigen aktivieren , um den ausgeschlossenen Ordner sichtbar zu machen).

user3251328
quelle
Ich hatte diesen Fehler für Tonnen von Dateien, nur eine zu entfernen und wieder einzuschließen, löste das Problem für die gesamte Lösung.
Daryl
Rechtsklick auf was? "Vom Projekt ausschließen" entfernt den Ordner aus dem Solution Explorer. Es gibt kein "In Projekt einbeziehen"
Florian Winter
2
@FlorianWinter Um mit der rechten Maustaste auf den ausgeschlossenen Ordner zu klicken, muss Alle Dateien anzeigen aktiviert sein . Dies kann über den Projektmappen-Explorer aktiviert werden. Es befindet sich neben der Schaltfläche Alle reduzieren.
user3251328
Ich weiß nicht warum, aber dies funktionierte in VS2019, als ich einem Projekt eine neue Datei mit einer neuen Klasse hinzufügte, aber keine neue Instanz dieser Klasse in einem anderen Projekt erstellen konnte, das bereits einen Verweis auf das enthaltende Projekt der neuen Klasse hatte. ..¯\_(ツ)_/¯
matt.fc
7

Ich habe ein ähnliches Problem mit Referenzen, die in VS2010 nicht erkannt wurden, und die Antworten hier konnten es nicht korrigieren.

Das Problem in meiner Lösung hing mit der Erweiterung des Pfades zusammen, in dem sich das Projekt befand, auf das verwiesen wurde. Während ich mit SVN arbeite, habe ich einen Zweig eines Repositorys erstellt, um einige Tests durchzuführen, und dieser Zweig hat die Pfadstruktur um zwei Ebenen erhöht, sodass der Pfad zu lang wurde, um in Windows verwendet werden zu können. Dies hat keinen Fehler ausgelöst, aber den Namespace der Projektreferenz nicht erkannt. Als ich den Ort des Projekts korrigierte, um einen kleineren Pfad zu haben, ging alles gut.

onurb84
quelle
2
Dies war auch für uns ein Problem und es war die Pfadlänge, die das Problem verursachte. VS muss in diesem Fall einen besseren Fehler machen, da der Fehler, den wir erhalten haben, ziemlich irreführend war.
VoodooChild
Dank Ihrer Antwort kam mir eine Idee. Ich habe mir den Pfad meines Projekts angesehen und festgestellt, dass der Stammordner, der vom Quellbaum erstellt wurde, "% 20" anstelle von _ im Namen hat. Ich habe es in _ geändert und jetzt funktioniert alles einwandfrei.
Fernando Wolff
5

In meinem Fall wurde die referenzierte DLL in einer höheren Version von .Net Framework erstellt. Nachdem ich die Referenz hinzugefügt hatte, konnte ich sie verwenden. Sobald ich einen Build erstellt habe, wird der Fehler "Fehlende Referenz" angezeigt. Ich aktualisiere die DLL, der Fehler wird gehen, aber es würde nie bauen. In diesem Beitrag habe ich die Framework-Version überprüft und konnte sie beheben, indem ich das referenzierte Projekt in derselben Version erstellte.

Ankur-m
quelle
3

Möglicherweise befindet sich die Typentabelle des Projekts in einem falschen Zustand. Ich würde versuchen, die Referenz zu entfernen / hinzuzufügen. Wenn dies nicht funktioniert, erstellen Sie ein anderes Projekt, importieren Sie meinen Code und prüfen Sie, ob dies funktioniert.

Ich bin bei der Verwendung von VS 2005 darauf gestoßen. Man würde jedoch erwarten , dass MS dieses spezielle Problem inzwischen behoben hat.

Dave
quelle
Können Sie dieses Problem beheben?
Fran_gg7
3

Die Frage wurde bereits vergeben, es sind jedoch noch keine weiteren Details beschrieben, die überprüft werden müssen.

Auch ich hatte dieses Verhalten, bei dem in Projekt A auf Projekt B verwiesen wurde, der Namespace von Projekt B in Projekt A jedoch nicht erkannt wurde. Nach einigem Graben stellte ich fest, dass mein Pfad zu lang war. Durch die Reduzierung des Projektpfads (sowohl A als auch B) wurden die Referenzen sichtbar und verfügbar.

Ich habe diese Theorie getestet, indem ich Projekt C mit einer viel geringeren Pfadtiefe erstellt habe. Ich habe in Projekt A auf Projekt C verwiesen. Die Referenzen haben wie erwartet korrekt funktioniert. Ich habe dann Projekt C aus der Lösung entfernt, Projekt C lediglich auf einen tiefen Pfad verschoben, genau wie Projekt B, und Projekt C wieder zur Lösung hinzugefügt und versucht, es zu kompilieren. Ich hatte dann keine Sicht mehr, um C-Objekte zu projizieren.

Barrypicker
quelle
2

In meinem Fall hatte ich eine Klassenbibliothek kopiert und den "Assembly Name" in den Projekteigenschaften nicht geändert, sodass eine DLL die andere überschrieb ...

Fernando Meneses Gomes
quelle
2

Dies ist mir in Visual Studio 2019 passiert. Für mich habe ich versucht, auf ein anderes Projekt in meiner Lösung zu verweisen. Hier sind die Schritte, die ich unternommen habe, falls es jemand anderem hilft:

  1. Stellen Sie sicher, dass das Projekt, auf das ich verweisen wollte, unter Verweise aufgeführt ist
  2. Stellen Sie sicher, dass beide Projekte die richtige Version von .NET Framework verwenden
  3. Erstellte das Projekt (klickte auf den grünen Pfeil "Start")

Ich war verwirrt, weil ich nach den Schritten 1 und 2 immer noch den Fehler bekam, aber das Erstellen des Projekts schien ihn zu beheben.

mtfalcon31
quelle
1

Ich hatte ein ähnliches Problem damit, dass der Namespace / die Methode während der Ausführung nicht gefunden wurde, obwohl dies während der Kompilierung in Ordnung war. Der Grund dafür scheint zu sein, dass die Assembly, auf die ich verwies, in GAC bereitgestellt und seitdem geändert wurde, also als ich auf die Assembly verwies In Visual Studion wurde die neueste Version verwendet, aber zur Laufzeit wurde die Version für GAC verwendet.

Pavel Tsybulivskyi
quelle
1

In meinem Fall habe ich den Fehler nur in VS 2015 erhalten. Beim Öffnen des Projekts in VS 2017 war der Fehler verschwunden.

Daniel
quelle
1

Verrückt. Ich weiß.

Versuchte alle Optionen hier. Neustart, Bereinigung, manuelles Einchecken generierter DLLs (dies ist von unschätzbarem Wert, um zu verstehen, ob Sie selbst durcheinander sind).

Ich habe es zum Laufen gebracht, indem ich die Ausführlichkeit von MSBuild in den Optionen auf "Detailliert" gesetzt habe.

Program.X
quelle
Für mich war es eine Build-Konfiguration, die bei PlatformTarget auf AnyCpu festgelegt wurde, als der Konfigurationsname x86 war. Diese Einstellung hat mir geholfen, es herauszufinden.
Dbl
1

Diese Frage wurde bereits für das Originalplakat beantwortet, aber falls jemand in einem MS-Test-Projekt darauf stößt:

Klicken Sie in Visual Studio auf das Menü Test -> Testeinstellungen -> Standardprozessorarchitektur und stellen Sie sicher, dass die Architektur mit der der anderen Assembly übereinstimmt, auf die Sie verweisen. Wenn die andere Baugruppe x64 ist und Ihre Testeinstellungen x86 sind, können die Symptome auftreten, die auf dem Originalposter aufgetreten sind.

S. Hooley
quelle
0

Ich habe an einem Xamarin-Projekt gearbeitet und wie immer hat das Löschen des obj-Ordners und das Neuerstellen mein Problem gelöst. Der Namespace, den mein VS nicht erkannte, war übrigens ein Code in meinem eigenen Projekt

Mohas
quelle
0

In meinem Fall hat das Entfernen / Hinzufügen dieser Baugruppe funktioniert.

Scheich Sabeer
quelle
0

Ich hatte ein ähnliches Problem, dessen Fehlerbehebung einige Zeit in Anspruch nahm, und dachte daher, es zu teilen:

Der Namespace, der in meinem Fall nicht aufgelöst werden konnte, war Company.Project.Common.Models.EF . Ich hatte eine Datei in einem neuen Company.Project.BusinessLogic.Common- Namespace hinzugefügt .

Die meisten Dateien hatten eine

using Company.Project;

Und dann die Modelle als Common.Models.EF referenzieren . Alle Dateien, die auch eine hatten

using Company.Project.BusinessLogic;

Fehlgeschlagen, da VS nicht bestimmen konnte, welcher Namespace verwendet werden soll.

Die Lösung bestand darin, den zweiten Namespace in Company.Project.BusinessLogic.CommonServices zu ändern

MaPi
quelle
-1

Visual Studio 2019 neu starten - das hat es geschafft.

Jeff Woehler
quelle
Vaccano schrieb: Ich habe versucht: Visual Studio neu
starten