Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Niezależnie od tego, czy piszesz nową aplikację platformy UWP, czy migrujesz istniejącą aplikację systemu Windows 8.x (wcześniej nazywaną aplikacją ze sklepu Microsoft Store), możesz wykonać ten sam zestaw procedur. Aby utworzyć aplikację natywną platformy .NET, wykonaj następujące kroki:
Opracuj aplikację Platformy Uniwersalnej Systemu Windows (UWP)i przetestuj kompilacje debugujące swojej aplikacji, aby upewnić się, że działa prawidłowo.
Ręczne rozwiązywanie brakujących metadanych i powtórz krok 3 do momentu rozwiązania wszystkich problemów.
Uwaga / Notatka
Jeśli migrujesz istniejącą aplikację systemu Windows 8.x do platformy .NET Native, zapoznaj się z artykułem Migrating Your Windows 8.x App to .NET Native (Migrowanie aplikacji systemu Windows 8.x do platformy .NET Native).
Krok 1. Opracowywanie i testowanie wersji debugowania aplikacji platformy UWP
Niezależnie od tego, czy tworzysz nową aplikację, czy migrujesz istniejącą, postępuj zgodnie z tym samym procesem co w przypadku dowolnej aplikacji systemu Windows.
Utwórz nowy projekt platformy UWP w programie Visual Studio przy użyciu szablonu aplikacji uniwersalnej systemu Windows dla języka Visual C# lub Visual Basic. Domyślnie wszystkie aplikacje platformy UWP docelowo korzystają z CoreCLR, a ich wersje wydań są kompilowane przy użyciu łańcucha narzędzi .NET Native.
Należy pamiętać, że istnieją pewne znane problemy ze zgodnością między kompilowaniem projektów aplikacji platformy UWP za pomocą łańcucha narzędzi .NET Native i bez niego. Aby uzyskać więcej informacji, zapoznaj się z przewodnikiem migracji .
Teraz możesz napisać kod w języku C# lub Visual Basic względem obszaru powierzchni platformy .NET Native działającego w systemie lokalnym (lub w symulatorze).
Ważne
Podczas opracowywania aplikacji zanotuj użycie serializacji lub odbicia w kodzie.
Domyślnie buildy debugowe są kompilowane w trybie JIT, aby umożliwić szybkie wdrażanie za pomocą funkcji 'Uruchom' (F5), podczas gdy buildy wersji końcowej są kompilowane za pomocą technologii wstępnej kompilacji .NET Native. Oznacza to, że należy skompilować i przetestować kompilacje debugowania aplikacji, aby upewnić się, że działają normalnie przed skompilowaniem ich za pomocą łańcucha narzędzi .NET Native.
Krok 2: Obsługa dodatkowego użycia odbijania i serializacji
Plik dyrektyw środowiska uruchomieniowego, Default.rd.xml, jest automatycznie dodawany do projektu podczas jego tworzenia. Jeśli programujesz w języku C#, zostanie on znaleziony w folderze właściwości projektu. Jeśli programujesz w języku Visual Basic, zostanie on znaleziony w folderze Mój projekt w projekcie.
Uwaga / Notatka
Aby zapoznać się z omówieniem procesu kompilacji platformy .NET Native, który zawiera podstawowe informacje na temat tego, dlaczego wymagany jest plik dyrektyw środowiska uruchomieniowego, zobacz .NET Native and Compilation.
Plik dyrektyw środowiska uruchomieniowego służy do definiowania metadanych, których aplikacja potrzebuje w czasie wykonywania. W niektórych przypadkach domyślna wersja pliku może być odpowiednia. Jednak niektóre kod, który opiera się na serializacji lub odbicia, mogą wymagać dodatkowych wpisów w pliku dyrektyw środowiska uruchomieniowego.
Serializacja
Istnieją dwie kategorie serializatorów, a oba mogą wymagać dodatkowych wpisów w pliku dyrektyw środowiska uruchomieniowego:
Serializatory nieoparte na odbiciu. Serializatory znalezione w bibliotece klas frameworka .NET, takie jak klasy DataContractSerializer, DataContractJsonSerializer, i XmlSerializer, nie polegają na refleksji. Jednak wymagają one wygenerowania kodu na podstawie obiektu, który ma być serializowany lub deserializowany. Aby uzyskać więcej informacji, zobacz sekcję "Serializatory firmy Microsoft" w Serializacji i Metadanych.
Serializatory innych firm. Biblioteki serializacji innych firm, z których najbardziej popularną jest serializator Newtonsoft JSON, są zazwyczaj oparte na mechanizmie refleksji i wymagają umieszczania wpisów w pliku *.rd.xml do obsługi serializacji i deserializacji obiektów. Aby uzyskać więcej informacji, zobacz sekcję "Serializery firm trzecich" w Serializacja i Metadane.
pl-PL: Metody, które opierają się na refleksji
W niektórych przypadkach użycie odbicia w kodzie nie jest oczywiste. Niektóre typowe interfejsy API lub wzorce programowania nie są uważane za część interfejsu API odbicia, ale polegają na odbiciu w celu pomyślnego wykonania. Obejmuje to następujące instancje typów i metody konstruowania:
Metoda Type.MakeGenericType
Metody Array.CreateInstance i Type.MakeArrayType
Metoda MethodInfo.MakeGenericMethod.
Aby uzyskać więcej informacji, zobacz interfejsy API , które opierają się na odbiciu.
Uwaga / Notatka
Nazwy typów używane w plikach dyrektyw środowiska uruchomieniowego muszą być w pełni kwalifikowane. Na przykład plik musi określać "System.String" zamiast "String".
Krok 3. Wdrażanie i testowanie kompilacji wydania aplikacji
Po zaktualizowaniu pliku dyrektyw środowiska uruchomieniowego można ponownie skompilować i wdrożyć wersje produkcyjne twojej aplikacji. Pliki binarne platformy .NET Native są umieszczane w podkatalogu ILC.out katalogu określonego w ścieżce wyjściowej kompilacji pola tekstowego właściwości projektu okno dialogowe, skompiluj kartę. Pliki binarne, które nie są w tym folderze, nie zostały skompilowane przy użyciu platformy .NET Native. Dokładnie przetestuj aplikację i przetestuj wszystkie scenariusze, w tym scenariusze awarii, na każdej z jej platform docelowych.
Jeśli aplikacja nie działa prawidłowo (szczególnie w przypadkach, gdy rzuca wyjątek MissingMetadataException lub MissingInteropDataException podczas działania), postępuj zgodnie z instrukcjami w następnej sekcji, Krok 4: Ręczne rozwiązywanie problemów z brakującymi metadanymi. Włączenie wyjątków pierwszej szansy może pomóc w znalezieniu tych usterek.
Podczas testowania i debugowania debugowych kompilacji Twojej aplikacji i masz pewność, że wyeliminowałeś wyjątki MissingMetadataException i MissingInteropDataException, należy przetestować aplikację jako zoptymalizowaną aplikację .NET Native. W tym celu zmień konfigurację aktywnego projektu z Debug na Release.
Krok 4. Ręczne rozwiązywanie problemów z brakującymi metadanymi
Najczęstszym błędem, który występuje na platformie .NET Native, ale nie występuje na komputerze stacjonarnym, jest wyjątek MissingMetadataException, MissingInteropDataExceptionlub MissingRuntimeArtifactException. W niektórych przypadkach brak metadanych może manifestować się w nieprzewidywalnym zachowaniu, a nawet w przypadku awarii aplikacji. W tej sekcji omówiono sposób debugowania i rozwiązywania tych wyjątków przez dodanie dyrektyw do pliku dyrektyw środowiska uruchomieniowego. Aby uzyskać informacje na temat formatu dyrektyw środowiska uruchomieniowego, zobacz Dyrektywy środowiska uruchomieniowego (rd.xml) Dokumentacja pliku konfiguracji. Po dodaniu dyrektyw środowiska uruchomieniowego należy ponownie wdrożyć i przetestować aplikację i rozwiązać wszystkie nowe MissingMetadataException, MissingInteropDataExceptioni MissingRuntimeArtifactException wyjątki, dopóki nie wystąpią więcej wyjątków.
Wskazówka
Określ dyrektywy środowiska uruchomieniowego na wysokim poziomie, aby umożliwić aplikacji odporność na zmiany kodu. Zalecamy dodanie dyrektyw środowiska uruchomieniowego na poziomie przestrzeni nazw i typów, a nie na poziomie elementów. Należy pamiętać, że może wystąpić kompromis między odpornością a większymi plikami binarnymi z dłuższymi czasami kompilacji.
Podczas rozwiązywania problemu z brakiem wyjątku metadanych należy wziąć pod uwagę następujące problemy:
Co aplikacja próbowała zrobić przed wyjątkiem?
- Czy na przykład wiązanie danych, serializowanie lub deserializacja danych, czy bezpośrednie użycie API refleksji?
Czy jest to izolowany przypadek, czy uważasz, że napotkasz ten sam problem dla innych typów?
- Na przykład, wyjątek MissingMetadataException jest zgłaszany podczas serializacji typu w obiektowym modelu aplikacji. Jeśli znasz inne typy, które będą serializowane, możesz dodać dyrektywy środowiska uruchomieniowego dla tych typów (lub dla ich zawierających przestrzenie nazw, w zależności od tego, jak dobrze jest zorganizowany kod) w tym samym czasie.
Czy można ponownie napisać kod, aby nie używał odbicia?
Czy na przykład kod używa słowa kluczowego
dynamic, gdy wiesz, jakiego typu oczekiwać?Czy kod wywołuje metodę, która zależy od odbicia, gdy jest dostępna pewna lepsza alternatywa?
Uwaga / Notatka
Aby uzyskać dodatkowe informacje na temat obsługi problemów wynikających z różnic w refleksji i dostępności metadanych w aplikacjach desktopowych oraz w .NET Native, zobacz interfejsy API, które opierają się na refleksji .
Aby zapoznać się z niektórymi konkretnymi przykładami obsługi wyjątków i innych problemów występujących podczas testowania aplikacji, zobacz:
Przykład : Rozwiązywanie problemów z programowaniem dynamicznym
wyjątki środowiska uruchomieniowego w aplikacjach natywnych platformy .NET