WPF eine Ausnahme Parsen der XAML-Code, umfasst eine Winforms-Benutzer-Kontrolle
Ich habe eine WPF-Anwendung, die Gebrauch macht von einer Winforms-Benutzer die Kontrolle, die ich erstellt habe mit C++/CLI. Wenn meine Anwendung zum Parsen der XAML-Code für mein main-Fenster, wirft er eine exception. Die information erscheint etwas abgekürzt, aber er sagt:
A first chance exception of type 'System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll
Additional information: is not a valid Win32 application. (Exception from HRESULT: 0x800700C1) Error in markup file 'OsgViewer;component/osgviewerwin.xaml' Line 1 Position 9.
Kommentierte ich meine Winforms controls im XAML-und alles lädt einwandfrei. Ich dachte, vielleicht ist der Konstruktor für meine Steuerung ist dabei etwas schlecht, also habe ich ein Haltepunkt, aber der Haltepunkt ist offenbar nicht aktiviert, wenn ich starten, um die app auszuführen, und wird nie erreicht, was ich verstehe, bedeuten die DLL mit, die Linie wird nicht geladen. Das würde wahrscheinlich bewirken, dass eine Ausnahme geworfen, wenn ein Objekt von einem Typ in der DLL instanziert, die den Körper des Objekts Konstruktor nicht gefunden werden konnte.
Ich getan habe dies erfolgreich bei einem anderen Projekt in der Vergangenheit, so zog ich in eine andere WinForms-Benutzer-Steuerelement von dieser app, und instanziiert es in der XAML, und dass alles Prima funktioniert.
Dass es So etwas in dieser DLL. Ich habe einen Verweis auf die DLL in meine WPF C# - app, und wenn ich laden Sie die DLL im Objekt-Browser alle benötigten Klassen und namespaces zeigen sich gut. Die app kompiliert in Ordnung, das problem nur auftaucht, wenn das Parsen der XAML-Code. Jemand so etwas gesehen? Alle Ideen, was könnte die Ursache sein? Ideen für debugging? Danke!
<Window x:Class="OsgViewer.OsgViewerWin"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:int="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
xmlns:myns="clr-namespace:MyGlobalNS.MyNS;assembly=MyAssembly"
...
<int:WindowsFormsHost x:Name="m_Host">
<myns:CMyClass x:Name="m_MyClass" />
</int:WindowsFormsHost>
...
</window>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich Probleme, wie (aber nicht mit der exakt gleichen Fehlermeldung). Es scheint, als ob WPF kann nicht instanziiert werden, Ihre Winforms-Benutzer-Kontrolle.
Die Herausforderung ist, herauszufinden, warum. Hier sind meine Vorschläge, die Sie könnten versuchen:
Um herauszufinden, die Abhängigkeiten auf native DLLs, sollten Sie das tool verwenden,Dependency Walker (depends.exe). .NET Reflector wird nur prüfen, verwaltet Abhängigkeiten.
Ich habe gesehen, dass dieses problem beim Versuch, die Verwendung von boost::threads. Zur Unterstützung von thread-local storage, boost::threads macht einige Win32-API-Aufruf, der ist nicht kompatibel mit CLI-Anwendungen. Das problem wird ausgelöst, wenn Sie versuchen, um #include, etwas von threads in CLI code.
Lösung ist entweder vermeiden Sie die Verwendung von boost::threads, die ganz oder zu beschränken, Ihre Verwendung zu .cpp-Dateien in nativen code.
Ich hatte ähnlich Symptome und mein problem war, dass die C# - Projekt wurde festgelegt, dass Jede CPU, während die C++ - Projekt wurde eingestellt, um die Nutzung der x86-Architektur. Um beide zu verwenden x86 das problem gelöst
Ich hatte auch dieses problem und alle die ich tun musste, war gehen Sie in den Projekt-Eigenschaften>Sicherheit, und klicken Sie auf den Dies ist eine voll Vertrauenswürdige Anwendung. Ich lief mein Projekt erneut und es funktionierte!
Sind Sie sicher, dass Sie die dll entweder in den system32 Ordner oder in den gleichen Ordner mit der exe-Datei. Ich habe die genau gleiche Fehlermeldung, wenn ein WPF-Projekt erstellt, mit CLI-dll, während die dll befand sich in den anderen Ordner.
mike
Hatte ich auch diese Meldung execption, aber meine Lösung war die änderung der Reihenfolge der XAML-elments. Ich war mit ein XmlDataProvider und die Anzeige der Inhalte in einer listbox. Ich habe nur den XmlDataProvider, bevor die ListBox.