Stworzyłem nową aplikację Metro Split w C++ za pomocą VS2012 na Win8 (oba RC). Wszystko skompilowane i opracowane po wyjęciu z pudełka. Następnie zmieniłem działanie i zmieniłem wygenerowane przestrzenie nazw na własne. Po kilku próbach i udrękach, dostałem wszystko do skompilowania bez ostrzeżeń, błędów, ani wiadomości. Aplikacja (jak jest w szablonie projektu) działa dobrze.XAML nie może znaleźć odwołania w lokalnej przestrzeni nazw
Jednakże, jeśli staram się zmieniać zarówno generowanych plikach XAML (ItemsPage.xaml lub SplitPage.xaml) pojawia się „błąd Markup” na pierwszej linii:
Nazwa „LayoutAwarePage” nie istnieje w przestrzeni nazw "używając: ABProduct.Client.Common".
Definicja klasy jest:
namespace A{ namespace B { namespace Product { namespace Client { namespace Common
Kod kompiluje i działa poprawnie. Dzieje się tak tylko w trybie projektowania.
AKTUALIZACJA: Dodałem nowy plik xaml i (po poprawieniu przestrzeni nazw) wszystko działało.
Proszę dać mi znać, jeśli potrzebujesz dodatkowych informacji.
Jaka jest nazwa pliku .winmd wygenerowanego przez projekt? Nazwa pliku .winmd musi być prefiksem nazwy przestrzeni nazw. Tak więc, dla tej przestrzeni nazw, .winmd musi mieć nazwy A.winmd, A.B.winmd, A.B.Product.winmd, A.B.Product.Client.winmd lub A.B.Product.Client.Common.winmd. Wymóg ten jest nakładany przez środowisko wykonawcze dla typów publicznych w komponentach (bibliotekach DLL). Jednak projektant kończy ładowanie exe jako biblioteki dll, więc jeśli chcesz używać projektanta, twoje klasy muszą również spełniać te same wymagania nazewnicze w projektach aplikacji. –
[Jeśli to nie pomoże, proszę dać mi znać, a ja mogę pomóc w zbadaniu.] –
Fantastyczne! Plik WinMD był po prostu Client.winmd. Rozładowałem projekt, zmieniłem główny obszar nazw na A.B.Product.Client, a następnie ponownie załadowałem i przebudowałem projekt. Plik WinMD nazywa się teraz A.B.Product.Client, a XAML ładuje się poprawnie. To zdecydowanie odpowiedź. Jeśli chcesz dodać swój komentarz jako odpowiedź, zaznaczę to. – basilard99