Der Name <…> existiert nicht im Namespace clr-namespace <…>

80

Ich habe eine kleine WPF-Anwendung, die früher gut kompiliert wurde, aber nicht mehr ist. Ich kann nicht wirklich sagen, an welchem ​​Punkt es aufgehört hat zu bauen. Es hat an einem Tag einfach gut funktioniert und am nächsten nicht.

Hier ist die Projektstruktur:

Geben Sie hier die Bildbeschreibung ein

Es gibt keine anderen Projekte oder externen Referenzen als Standard-.net-DLLs.

Hier ist die Benutzersteuerung, aus der das Problem stammt:

<UserControl x:Class="TimeRecorder.HistoryUserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:TimeRecorder.ViewModel"
         xmlns:framework="clr-namespace:TimeRecorder.Framework"
         mc:Ignorable="d" Height="Auto" Width="Auto" Padding="5">
<UserControl.Resources>
    <local:HistoryViewModel x:Key="ViewModel"/>
    <framework:BoolToColorConverter x:Key="ColorConverter"/>
</UserControl.Resources>
<StackPanel DataContext="{StaticResource ViewModel}">

Und hier ist der Fehler, den ich bekomme: http://i48.tinypic.com/5u1u8w.png

Bitte beachten Sie, dass dies nicht nur die eine Datei im Screenshot ist, sondern alle Referenzen, die ich in ähnlicher Weise in xaml in allen Benutzersteuerungs- / Fensterdateien in diesem Projekt hinzufüge.

Die Datei ist also da, der Namespace in der Datei ist korrekt, der Namespace / Klassenname in der xaml-Datei ist (nach meinem Verständnis) korrekt. Ich bekomme Intellisense, wenn ich das xaml eingebe, damit es die Dateien dann in Ordnung findet, aber nicht, wenn es kompiliert wird.

Die häufigste Lösung in anderen Beiträgen war die .net-Framework-Version. Es ist derzeit für mein Haupt- und Testprojekt auf .Net Framework 4 eingestellt. Die Vollversion nicht das Client-Profil.

Ich glaube, ich habe Folgendes durcheinander gebracht: Im Konfigurationsmanager ist für beide Projekte die Plattform auf Beliebige CPU eingestellt. Als ich jedoch versuchte, dies zu lösen, stellte ich fest, dass das Hauptprojekt auf x86 und das Testprojekt auf Beliebig eingestellt war ZENTRALPROZESSOR. Deshalb habe ich im Konfigurationsmanager jede CPU manuell für das Hauptprojekt hinzugefügt. Ich weiß jedoch ehrlich gesagt nicht, ob ich das richtig gemacht habe oder ob ich es tun sollte. Gibt es als zusätzliche Frage eine Möglichkeit, den Konfigurationsmanager auf seinen Standardzustand zurückzusetzen? Wird dies etwas für das Hauptproblem zu sagen haben? Ich weiß nicht, ob das Hauptprojekt immer auf x86 eingestellt war oder nicht oder ob ich es irgendwie auf x86 geändert habe und es dann kaputt gegangen ist. Wie bereits erwähnt, wurde dieses Projekt für eine Weile problemlos kompiliert.

ardal
quelle
Zu Ihrer Information können Sie ProgressTimeSpentUserControl.xaml lesen. Vielleicht möchten Sie es besser machen,
indem Sie
Kein Problem :) Es ist nur eine temporäre Datei, in der ich einige Dinge getestet habe, wobei die anderen Teil des Projekts mit zugehörigen Ansichtsmodellen sind, und meine OCD sagte mir, ich solle sie als nicht relevant markieren;)
ardal
2
Ich hatte vor 2 Tagen ein sehr ähnliches Problem - ich habe mit dem Konfigurationsmanager herumgespielt und versucht, alles so einzustellen, dass es als "beliebige CPU" anstatt als x86 erstellt wird, und es wurde nicht mehr erstellt. Ich stellte fest, dass ich zwei Dinge getan hatte - erstens hatte ich es im Release-Modus belassen, und zweitens war der Build-Konfigurationsmanager der Assembly in einigen Fällen nicht zum Erstellen markiert. Mein Fix bestand darin, alle verfügbaren Modi (x86, gemischte Plattformen und jede CPU) durchzugehen und alle zu erstellenden Assemblys festzulegen. Es klingt wie eines dieser Dinge, an die Sie sich selbst treten werden, wenn Sie nicht daran denken, wenn Sie herausfinden, was falsch ist!
Jay
Ähnliche Frage (mit funktionierender Antwort): stackoverflow.com/questions/28216096/…
Oleksa
Für alle, die hier im Jahr 2018 gelandet sind .NET 4.6.1 Ich habe VS neu gestartet, dann neu erstellt und es hat funktioniert. Ich habe definitiv mehr Zeit verbracht, als ich hätte denken sollen, dass ich irgendwo einen Typ-O hatte.
Mwspencer

Antworten:

138

Jedes Mal, wenn es mir passiert ist, habe ich Visual Studio neu gestartet, die Lösung neu erstellt und es hat einwandfrei funktioniert. Ich kann nicht sagen warum

gil kr
quelle
15
Eine Sache hinzuzufügen - nur wenn ich VS mit Administratorrechten neu starte, wird das Projekt erfolgreich aufgebaut. Mit regulären Berechtigungen half sogar das Neustarten und Neuerstellen der Lösung nicht.
Sevenate
1
Speichern Sie einfach die Lösung, die das Problem verursacht. Starten Sie VS im Admin-Modus und starten Sie "Alle neu erstellen" aus der Lösungsdatei. es funktionierte. sehr gruselig.
Pollaris
12
Traurig zu sehen, dass dies 5 Jahre später immer noch nicht gelöst wurde. Mit VS 2017 besteht das gleiche Problem und die gleiche Lösung funktioniert immer noch!
CodeHacker
@ Gil Kr Ich hatte ähnliche Probleme mit Xamarin und seiner XML. Ich habe festgestellt, dass das Problem durch Verschieben des Projekts von einem Netzwerkordner in einen lokalen Ordner behoben wurde. Ich frage mich, ob das hier der Fall ist.
Vdidxho
3
Es hat mein Problem nicht gelöst, selbst wenn ich mit Administratorrechten angefangen habe.
MindRoasterMir
30

Zusätzlich zu der Meldung "Existiert nicht im Namespace" erhielt ich vom Designer die Meldung, dass das Fenster für x64- und ARM-Ziele nicht angezeigt werden konnte.

Ich habe gerade festgestellt, dass das Umschalten des Builds in den x86-Modus, das Durchführen einer Wiederherstellungslösung, das Zurückschalten in den x64-Modus und das erneute Wiederherstellen [beide] Probleme behebt.

Das einfache Neuerstellen der x64-Lösung hat nichts gebracht.

Jerry
quelle
5
Es gibt noch einen Schritt. Sie müssen auf x86 neu erstellen und dann die xaml im Designer öffnen. Und erst dann gehe zurück zu x64.
Dzienny
2
Ich habe versucht, Visual Studio neu zu starten und dann neu zu erstellen, aber es wurde immer noch der gleiche Fehler angezeigt. @ Jerry - Ihre Lösung hat in VS2012 für mich funktioniert.
Barrie
Jerry, es klingt zweifelhaft, aber deine Lösung funktioniert! Ich habe mein Projekt für AnyCPU kompiliert, aber irgendwie unter x86 kompiliert und dieses Problem dann wieder gelöst. Ich vermute, dass AnyCPU möglicherweise auf x86 zurückgreift, aber aufgrund eines Fehlers in VS wurde dieser Teil des Codes nur erstellt, wenn er unter x86 kompiliert wurde.
Wayne Lo
Ja, alle ANDEREN Fehler zusätzlich zu "existiert nicht im Namespace" müssen zuerst behoben werden.
Pollaris
Ist mir noch in VS2017 passiert. Das Schließen und erneute Öffnen von VS hat nicht funktioniert. Aber Ihre Lösung hat es getan.
Gordon Slysz
12

Dies hat bei Visual Studio 2012 (Update 3) für mich funktioniert.

  • Starten Sie Visual Studio neu
  • Fügen Sie der Namespace-Deklaration die aktuelle Assembly hinzu xmlns:framework="clr-namespace:TimeRecorder.Framework;assembly=MyAssembly
  • Build -> Build Solution
Leon Storey
quelle
arbeitete für mich VS2015 Professional Update3, danke :)
EricG
Kann überprüfen, es funktioniert auch unter Visual Studio 2019.
Zwanzig
11

Was ich als hilfreich empfunden habe (insbesondere wenn dieser Fehler auftritt App.xaml), ist das Auskommentieren der Referenz (en), die Ihnen Probleme bereiten, das Wiederherstellen und dann das Kommentieren. Ich denke, dies ermöglicht es dem gesamten Projekt, tatsächlich zu erstellen, anstatt den Build bei dem Fehler zu stoppen.

Soweit ich das beurteilen kann, versucht die App, die Dateien in einer bestimmten Reihenfolge zu erstellen. Wenn also App.xamloder vermutlich andere Klassendateien in einer Referenz fehlerhaft sind, wurde die Datei, die den Fehler verursacht, nicht korrekt kompiliert, weshalb dies nicht der Fall ist Die Datei wird in diesem Namespace nicht gefunden.

Jaysoncopes
quelle
2
Sie hatten die richtige Idee, als Sie sagten : the app is trying to build the files in a certain order. Dies brachte mich dazu, in meine .csprojAkte zu schauen . Es App.xaml.cswar an erster Stelle. Ich habe es dann unter die Datei verschoben, die diesen Fehler angezeigt hat, neu erstellt und der Fehler ist verschwunden. VIELEN DANK!
Stephan
9

Erstellen Sie Ihre Lösung neu (manchmal funktioniert sauber und dann besser). Schauen Sie sich dann Ihre Fehlerliste an, scrollen Sie ganz nach unten, und es wird höchstwahrscheinlich ein Fehler angezeigt, der das Kompilieren Ihrer Assembly nicht zulässt, und der XAML-Compiler verwendet höchstwahrscheinlich eine zwischengespeicherte Version der Assembly, nicht die neue, die Sie verwenden will bauen.

John C.
quelle
7

Ich hatte das ähnliche Problem. In meinem Fall musste ich Folgendes tun

  • Entfernen Sie das referenzierende Markup aus xaml (in diesem Beispiel <local:HistoryViewModel x:Key="ViewModel"/>)
  • Erstellen Sie die Klasse (in dieser Beispieldatei, die die HistoryViewModelKlasse enthält )
  • Fügen Sie nach dem Erstellen das referenzierende Markup in xaml hinzu
  • wieder bauen

Die obige Methode hat bei mir funktioniert.

Chandru
quelle
Sehen Sie sich meine Antwort an, um zu verstehen, warum dies Ihr Problem behoben hat.
Jaysoncopes
6

Was für mich funktioniert hat: - Wechseln Sie die Lösungskonfiguration von Debug zu Release - Wechseln Sie die Konfiguration von Release zu Debug zurück

Hugues
quelle
Seltsam. Das hat auch bei mir funktioniert. Hat auch in jeder Version saubere Builds erstellt.
GeoffCoope
4

Ist heute mit Visual Studio 2017 Community Edition auf dieses Problem gestoßen. Versuchte alle Vorschläge hier (VS 2017 zurücksetzen, von x64 auf x32 und wieder zurück geändert usw. usw.) und aus anderen Quellen ohne Erfolg. Intellisense weiß, dass alles da ist, aber ich habe jedes Mal den gleichen Fehler erhalten.

Wie auch immer, meine Lösung hat sich als sehr einfach herausgestellt ... nicht immer, wenn Sie ein paar Stunden mit dem Problem verbracht haben!

Grundsätzlich habe ich folgendes gemacht ...

  1. Entfernen Sie den fehlerhaften Code aus der xaml-Datei (in meinem Fall nur 3 Zeilen).
  2. Erstellen Sie ein Projekt, damit Sie einen erfolgreichen Build erhalten
  3. Zu diesem Zeitpunkt erschien das Layout magisch im Designerfenster, was ein gutes Zeichen war!
  4. Der in Punkt 1 entfernte Code, einschließlich des Eintrags xmlns:, wurde erneut eingefügt
  5. Zu diesem Zeitpunkt sollten Sie keine blauen Schnörkel bekommen ... hoffentlich
  6. Erstellen Sie das Projekt erneut

Es scheint, dass ein erfolgreicher Build "etwas" in VS und / oder der Assembly zurücksetzen muss. Wenn Sie einen erfolgreichen Build haben, versuchen Sie erneut, Ihren Code einzufügen.

DynamicL
quelle
Dies war eigentlich das einzige, was für mich funktioniert hat. Deshalb hasse ich VisualStudio mit XAML. Diese hackige Art des Spielens mit Konfigurationen ist nicht akzeptabel.
Goku
3

Keine der Lösungen hat bei mir funktioniert. Ich habe es so behoben:

  • Entfernen Sie die DLL der Bibliothek aus den Referenzen
  • Laden Sie den Quellcode der Bibliothek herunter (anstelle nur der DLL-Datei)
  • Erstellen Sie das Projekt der Bibliothek, um eine neue DLL-Datei zu erhalten
  • Fügen Sie die neue DLL-Datei zu den Referenzen des Hauptprojekts hinzu
Noxxys
quelle
3

Hatte dieses Problem im Kreis herumlaufen und ein paar Stunden verschwenden. Ich habe eine separate Benutzersteuerungs-DLL in das Projekt verschoben, damit sie im Projekt kompiliert wurde und nicht auf eine DLL verwiesen wird. Dies hat das gesamte Projekt zerstört, sodass ich alle Namespaces, Pfade und Dateinamen akribisch überprüft habe. Es wurde versucht, obj-Dateien zu löschen und zwischen Release und Debug zwischen x86 und AnyCPU zu wechseln. Öffnen, alle speichern, noch keine Freude neu kompilieren.

Denken Sie daran, dass der zuvor in VS2013 gekennzeichnete Fehler nicht direkt mit dem Ort zusammenhängt, an dem ich die XAML ändern musste, sondern mit

x:Name="myControl"

auf allen Steuerelementen anstelle von

Name="myControl"

repariert.

Mondwachs
quelle
Ich habe gerade das gleiche Problem wieder festgestellt und das x weggelassen: Beachten Sie, dass dies nur mit meiner eigenen Benutzersteuerung geschieht.
Moon Waxing
Du bist mein Held.
Holden
3

Ich habe Target Framework My Application von ".Net Framework 4.5" in ".Net Framework 4.6" geändert und es hat funktioniert!

amir Stapel
quelle
Ich habe mein Ziel von 4.6.1 auf 4.6 geändert und das hat auch funktioniert.
GisMofx
2

Hier ist ein seltsames Beispiel für eine ähnliche Sache:

<UserControl x:Class="Gtl.Ui.Controls.WaitControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:controls="clr-namespace:Gtl.Ui.Controls"
         mc:Ignorable="d" 
         d:DesignHeight="120" d:DesignWidth="120"             
         Background="Transparent">
...
</UserControl>

wird kompiliert (VS2013).

<UserControl x:Class="Gtl.Ui.Controls.WaitControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:controls="clr-namespace:Gtl.Ui.Controls"
         mc:Ignorable="d" 
         d:DesignHeight="120" d:DesignWidth="120"             
         Background="Transparent"
         IsVisibleChanged=onIsVisibleChanged>
...
</UserControl>

erzeugt den Fehler "Typ Ui nicht in Gtl.Ui.Gtl gefunden" (und ich versichere Ihnen, dass die Handler-Methode im Code-Behind existiert). Die Problemumgehung besteht darin, den Handler im Klassenkonstruktor hinzuzufügen, aber komm schon Microsoft, wtf läuft?

Julian Gold
quelle
Ich bin mit den obigen Kommentaren nicht einverstanden. Diese Art der "Kontexterweiterung" ist oft nützlich, um die Ursache eines solchen Fehlers zu identifizieren, der nicht NUR durch die Bedingungen des OP verursacht wird.
CJBrew
2

Ich hatte das gleiche Problem, als ich versuchte, den Namespace in xaml aufzurufen. zeigte, dass die Klasse im Namespace nicht verfügbar ist. Ich habe viel gesucht. Schließlich fand ich, dass dieses Problem mit VS war. Ich verwende VS 2013. Ich habe die folgenden Schritte ausprobiert:

  1. Build -> Configuration Manager -> Active Solution Platform -> Geändert zu x64 und x86 und einer beliebigen CPU.
  2. Den VS geschlossen und wieder geöffnet.
  3. Veränderung

    xmlns:VM="clr-namespace:MyFirstAppViewModel"
    

    zu

    xmlns:VM="clr-namespace:MyFirstAppViewModel;assembly=ViewModel"
    
Abhishek Birtharey
quelle
2

Dieser Fehler tritt normalerweise auf, wenn das Projekt während des letzten Builds nicht erfolgreich erstellt wurde.

Schritt 1) ​​Entfernen Sie zuerst den gesamten fehlerverursachenden Code aus der XAML- oder CS-Datei und erstellen und starten Sie das Projekt, indem Sie F5 drücken.

Schritt 2) Fügen Sie nacheinander Ihren Fehler verursachenden Code in XAML hinzu.

Laxman Marothiya
quelle
1
  • Ich würde empfehlen, umzubenennen, x:Key="ViewModel"vielleicht gibt es eine Panne
  • und wenn Sie tippen, local:zeigt Ihnen VS HistoryViewModel?
  • Überprüfen Sie auch, ob Ihre Classistpublic
WiiMaxx
quelle
1

Führen Sie einfach die Codeanalyse über das Menü " Erstellen" aus

Ana El Bembo
quelle
1

Ich habe festgestellt, dass das Ausführen des Befehls "Code-Analyse ausführen" alles neu erstellt und das Problem fast immer behebt (Rechtsklick auf Projekt> Analysieren> Code-Analyse ausführen). Dadurch werden die Ressourcendateien im Allgemeinen auch neu erstellt, sodass Zeichenfolgen usw. gefunden werden können.

Jeff
quelle
Außer, wie ich kürzlich festgestellt habe, wird auch dies nicht funktionieren. Ich musste VS schließen und neu starten. Oh, gut ...
Jeff
1

Versuchte alle Lösungen für diesen Thread, aber keine funktionierte. Es stellte sich heraus, dass dies an der Lösungskonfiguration lag. Meine WPF-App wurde aufgrund einiger nativer Abhängigkeiten, die dies erfordern, für X64 erstellt, aber die Lösungskonfiguration wurde für das Projekt weiterhin auf AnyCPU festgelegt. Durch das Erstellen einer neuen X64-Konfiguration für das Projekt im Lösungskonfigurationsmanager konnte der XAML-Designer meinen Typ und meinen Namespace endlich erkennen.

Xeaz
quelle
1

Stellen Sie vor dem Hinzufügen des Namensraums zu Ihrer .xaml-Datei sicher, dass Sie keine Kompilierungsfehler aufgrund des vorhandenen Codes haben.

Wenn alle Kompilierungsprüfungen in Ordnung sind, erstellen Sie Ihre Lösung neu und versuchen Sie, den erforderlichen Namespace hinzuzufügen, um dessen Klasse oder Eigenschaften zu verwenden.

Mahesh Anakali
quelle
0

Dies ist ein wiederkehrendes Problem für mich. Einmal fand ich die Lösung auf der Registerkarte Warnung . Es handelte sich um ein Problem mit der .NET Framework-Version , in dem Folgendes angegeben wurde:

Warnung 9 Die primäre Referenz "myDll" konnte nicht aufgelöst werden, da sie für das Framework ".NETFramework, Version = v4.5.2" erstellt wurde. Dies ist eine höhere Version als das derzeit angestrebte Framework ".NETFramework, Version = v4.0".

André Santaló
quelle
0

Es gibt einen Fehler bei der Pufferung der Objektlayouts. Wenn etwas umbenannt oder verschoben wird, geht es verloren. Was für mich im Allgemeinen funktioniert, ist, eine völlig neue Klasse zu erstellen und den gesamten alten Code zu kopieren, ihn für die neue Klasse zum Laufen zu bringen und dann die ursprüngliche Klasse zu entfernen. Manchmal können Sie versuchen, den neuen Klassennamen wieder in den ursprünglichen Namen umzubenennen, nachdem Sie ihn mit dem neuen Klassennamen in Betrieb genommen haben (normalerweise jedoch nicht).

DanW
quelle
0

Ich habe xmlns: local = "using: MyRootNamespace.ChildNamespace" am Header der .xaml verwendet und daraus xmlns: local = "clr-namespace: MyRootNamespace.ChildNamespace" gemacht ... nun, ich habe Intellisense einfach tun lassen der Job, und es hat funktioniert.

Morty
quelle
0

Das Problem ist, dass beim Erstellen des x86-Ziels der Ausgabepfad für das jeweilige Projekt auf bin \ x86 \ Debug festgelegt ist. Es sieht so aus, als würde Expression Blend das überhaupt nicht mögen. Es scheint nur daran interessiert zu sein, was in bin \ Debug ist.

Wenn Sie beispielsweise Ihre Ausgabepfade für das x86-Projekt in bin \ debug geändert haben, werden Sie sicher feststellen, dass dies funktioniert. Na ja, funktioniert sowieso bei mir :)

RobM
quelle
0

Das Ziel-Framework der DLL-Datei, die Sie hinzufügen, sollte mit dem Ziel-Framework Ihrer App übereinstimmen.

Shuangpeng Pang
quelle
0

Ich stand vor dem gleichen Problem. Sie erhalten diesen Fehler, können Ihr Projekt aber dennoch erfolgreich erstellen. Der Nachteil ist, dass Sie das Entwerfen der Benutzeroberfläche nicht sehen können (oder nur den Code bereinigen und störende wackelige Linien entfernen möchten). Lesen Sie viele Beiträge werden verschiedene Dinge ausprobiert, aber das Folgen funktioniert wie ein Zauber.

Versuchte dies in Visual Studio 2019:

Klicken Sie mit der rechten Maustaste auf Ihre Lösung -> Eigenschaften -> Konfigurationseigenschaften und ändern Sie die Projektkonfigurationen von Debug in Release oder umgekehrt.

Erstellen Sie danach Ihre Lösung neu. Es kann Ihr Problem lösen.

Nitish Kumar Pal
quelle