XAML kann nicht finden die Referenz im lokalen Namensraum
Erstellte ich eine neue U-Bahn-Split-App in C++ mit VS2012 auf Win8 (beide RC). Alles kompiliert und funktionierte out of the box. Ich wechselte dann ging durch und verändert die generierte namespaces, um meine eigenen. Nach einigen Irrungen und Wirrungen hab ich alles zum kompilieren mit keine Warnungen, Fehler oder Meldungen. Die app (wie es in der Projekt-Vorlage) läuft wunderbar.
Allerdings, wenn ich versuche zu Bearbeiten, entweder der generierten xaml-Dateien (ItemsPage.xaml oder SplitPage.xaml) bekomme ich ein "Markup-Fehler" auf der ersten Zeile:
Dem Namen "LayoutAwarePage" existiert nicht im namespace "verwenden:A. B. Produkt.Client.Common".
Die definition der Klasse lautet:
namespace A{ namespace B { namespace Product { namespace Client { namespace Common
Den code kompiliert in Ordnung, und läuft einwandfrei. Dies geschieht nur im design-Modus.
UPDATE: ich habe eine neue xaml-Datei, die (nach der Festsetzung der namespaces wieder) alles geklappt.
Bitte lassen Sie mich wissen, wenn zusätzliche Informationen erforderlich ist.
- Was ist der name der .die winmd-Datei erzeugt, die von Ihrem Projekt? Der name der .die winmd-Datei muss ein Präfix für den namespace-Namen. So, für diesen namespace, der .winmd muss den Namen A. winmd, A. B. winmd, A. B. Produkt.winmd, A. B. Produkt.Client.winmd-oder A. B. Produkt.Client.Common.winmd. Diese Anforderung auferlegt wird, von der Laufzeit für den öffentlichen Typen in Komponenten (dlls). Jedoch, der designer endet das laden der exe-Datei als dll, so dass, wenn Sie verwenden möchten die designer, Ihre Klassen muss mit der gleichen Benennung von Anforderungen in der Anwendung in Projekten.
- [Wenn das nicht hilft, bitte lassen Sie mich wissen und ich kann helfen, untersuchen.]
- Fantastisch! Die WinMD-Datei war einfach Client.winmd. Ich entladen das Projekt, so verändert sich der root-namespace zu A. B. Produkt.Client, dann neu geladen und neu erstellt das Projekt. Die WinMD-Datei heißt jetzt A. B. Produkt.Client-und XAML-lädt richtig. Das ist definitiv die Antwort. Wenn Sie möchten fügen Sie Ihren Kommentar als eine Antwort, ich werde es markieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Namen der WinMD-Datei erzeugt, indem Sie Ihr Projekt muss ein Präfix des namespaces, in denen sich die öffentliche WinRT-Typen definiert sind. Gegeben, dass Ihr Typ in der
A.B.Product.Client.Common
namespace , der WinMD-Datei muss einen der folgenden Namen:Die öffentlichen Typen muss auch definiert werden, in der WinMD-Datei mit der längsten Präfix entspricht, den namespace. Also, wenn Sie beide A. winmd und A. B. winmd, der Typ
A.B.MyClass
müssen definiert werden, A. B. winmd.Also, warum dein code funktioniert zur Laufzeit, aber nicht im designer? Die Regeln zur Namensgebung für öffentliche Typen gelten nur für die Typen in Windows-Runtime-Komponenten (für C++, DLL-Dateien), nicht für Anwendungen (EXE-Dateien).
Jedoch, zu können, muß das user-definierte Typen (einschließlich
LayoutAwarePage
), die designer laden Sie das Projekt EXE als DLL, so dass der naming-Regeln, die befolgt werden müssen.Hatte ich einen ähnlichen bug, aber dann habe ich geschlossen, VS, gelöscht .suo, und reloaded das Projekt, und alles hat Prima funktioniert.