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:
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:
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.
Antworten:
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
quelle
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.
quelle
Dies hat bei Visual Studio 2012 (Update 3) für mich funktioniert.
xmlns:framework="clr-namespace:TimeRecorder.Framework;assembly=MyAssembly
Build
->Build Solution
quelle
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.xaml
oder 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.quelle
the app is trying to build the files in a certain order
. Dies brachte mich dazu, in meine.csproj
Akte zu schauen . EsApp.xaml.cs
war 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!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.
quelle
Ich hatte das ähnliche Problem. In meinem Fall musste ich Folgendes tun
<local:HistoryViewModel x:Key="ViewModel"/>
)HistoryViewModel
Klasse enthält )Die obige Methode hat bei mir funktioniert.
quelle
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
quelle
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 ...
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.
quelle
Keine der Lösungen hat bei mir funktioniert. Ich habe es so behoben:
quelle
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.
quelle
Ich habe Target Framework My Application von ".Net Framework 4.5" in ".Net Framework 4.6" geändert und es hat funktioniert!
quelle
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?
quelle
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:
Veränderung
xmlns:VM="clr-namespace:MyFirstAppViewModel"
zu
xmlns:VM="clr-namespace:MyFirstAppViewModel;assembly=ViewModel"
quelle
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.
quelle
x:Key="ViewModel"
vielleicht gibt es eine Pannelocal:
zeigt Ihnen VSHistoryViewModel
?Class
istpublic
quelle
Führen Sie einfach die Codeanalyse über das Menü " Erstellen" aus
quelle
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.
quelle
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.
quelle
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.
quelle
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:
quelle
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).
quelle
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.
quelle
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 :)
quelle
Das Ziel-Framework der DLL-Datei, die Sie hinzufügen, sollte mit dem Ziel-Framework Ihrer App übereinstimmen.
quelle
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.
quelle