Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Universal Windows Platform (UWP) udostępnia wspólną platformę aplikacji dla każdego urządzenia z systemem Windows 10. W tym modelu aplikacje platformy UWP mogą wywoływać zarówno interfejsy API WinRT, które są wspólne dla wszystkich urządzeń, jak i interfejsy API (w tym Win32 i .NET), które są specyficzne dla rodziny urządzeń, na których działa aplikacja.
W tym przewodniku utworzysz pakiet NuGet z natywnym składnikiem platformy UWP (w tym kontrolką XAML), który może być używany zarówno w projektach zarządzanych, jak i natywnych.
Wymagania wstępne
Visual Studio 2017 lub Visual Studio 2015 r. Zainstaluj wersję Community Edition 2017 bezpłatnie z visualstudio.com; Można również korzystać z wersji Professional i Enterprise.
Interfejs wiersza polecenia narzędzia NuGet. Pobierz najnowszą wersję
nuget.exez nuget.org/downloads i zapisz ją w wybranej przez siebie lokalizacji (pobrany plik to bezpośrednio.exe). Następnie dodaj lokalizację do zmiennej środowiskowej PATH, jeśli jeszcze nie jest.
Utwórz składnik Windows Runtime dla platformy UWP
W Visual Studio, wybierz Plik > Nowy > Projekt, rozwiń węzeł Visual C++ > Windows > Uniwersalny, wybierz szablon Windows Runtime Składnik (Uniwersalny Windows), zmień nazwę na ImageEnhancer, a następnie kliknij przycisk OK. Zaakceptuj wartości domyślne dla Wersji Docelowej i Minimalnej Wersji, gdy zostanie wyświetlony monit.
Kliknij prawym przyciskiem myszy projekt w Solution Explorer, wybierz pozycję Dodaj > nowy element, kliknij węzeł Visual C++ > XAML, wybierz węzeł Kontrolka szablonu, i zmień nazwę na AwesomeImageControl.cpp, a następnie kliknij Dodaj:
Kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań i wybierz pozycję Właściwości. Na stronie Właściwości rozwiń Configuration Properties > C/C++, a następnie kliknij Output Files. W okienku po prawej stronie zmień wartość pozycji Generuj pliki dokumentacji XML na Tak:
Kliknij prawym przyciskiem myszy rozwiązanie , wybierz pozycję Kompilacja wsadowa, zaznacz trzy pola Debug w oknie dialogowym, jak przedstawiono poniżej. Dzięki temu podczas kompilacji wygenerujesz pełny zestaw artefaktów dla każdego z systemów docelowych, które Windows obsługuje.
W oknie dialogowym Kompilacja wsadowa kliknij pozycję Kompiluj, aby zweryfikować projekt i utworzyć pliki wyjściowe potrzebne dla pakietu NuGet.
Uwaga / Notatka
W tym przewodniku użyjesz artefaktów debugowania dla pakietu. W przypadku pakietu nie do debugowania sprawdź opcje Release w oknie dialogowym Batch Build i zapoznaj się z wynikowymi folderami wydania w kolejnych tych krokach.
Tworzenie i aktualizowanie pliku nuspec
Aby utworzyć plik początkowy .nuspec , wykonaj trzy poniższe kroki. Poniższe sekcje przeprowadzą Cię przez inne niezbędne aktualizacje.
Otwórz wiersz polecenia i przejdź do folderu zawierającego
ImageEnhancer.vcxproj(będzie to podfolder poniżej miejsca, w którym znajduje się plik rozwiązania).Uruchom polecenie NuGet
spec, aby wygenerowaćImageEnhancer.nuspec(nazwa pliku jest pobierana z nazwy.vcxprojpliku):nuget specOtwórz
ImageEnhancer.nuspecplik w edytorze i zaktualizuj go, aby był zgodny z poniższymi wartościami, zastępując YOUR_NAME odpowiednią wartością. Wartość<id>musi być unikatowa w nuget.org (zobacz konwencje nazewnictwa opisane w temacie Tworzenie pakietu). Należy również pamiętać, że należy również zaktualizować tagi autora i opisu lub wystąpi błąd podczas kroku pakowania.<?xml version="1.0"?> <package > <metadata> <id>ImageEnhancer.YOUR_NAME</id> <version>1.0.0</version> <title>ImageEnhancer</title> <authors>YOUR_NAME</authors> <owners>YOUR_NAME</owners> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>Awesome Image Enhancer</description> <releaseNotes>First release</releaseNotes> <copyright>Copyright 2016</copyright> <tags>image enhancer imageenhancer</tags> </metadata> </package>
Uwaga / Notatka
W przypadku pakietów utworzonych do użytku publicznego zwróć szczególną uwagę na <tags> element, ponieważ te tagi pomagają innym znaleźć pakiet i zrozumieć, co robi.
Dodawanie metadanych Windows do pakietu
Składnik Windows Runtime wymaga metadanych opisujących wszystkie jego publicznie dostępne typy, co umożliwia korzystanie z składnika przez inne aplikacje i biblioteki. Te metadane znajdują się w pliku winmd, który jest tworzony podczas kompilowania projektu i musi być uwzględniony w pakiecie NuGet. Plik XML z danymi funkcji IntelliSense jest również kompilowany w tym samym czasie i powinien również zostać uwzględniony.
Dodaj następujący <files> węzeł do .nuspec pliku:
<package>
<metadata>
...
</metadata>
<files>
<!-- WinMd and IntelliSense files -->
<file src="..\Debug\ImageEnhancer\ImageEnhancer.winmd" target="lib\uap10.0"/>
<file src="..\Debug\ImageEnhancer\ImageEnhancer.xml" target="lib\uap10.0"/>
</files>
</package>
Dodawanie zawartości XAML
Aby dołączyć kontrolkę XAML do składnika, należy dodać plik XAML zawierający domyślny szablon kontrolki (wygenerowany przez szablon projektu). Dotyczy to również <files> sekcji:
<?xml version="1.0"?>
<package >
<metadata>
...
</metadata>
<files>
...
<!-- XAML controls -->
<file src="Themes\Generic.xaml" target="lib\uap10.0\Themes"/>
</files>
</package>
Dodawanie bibliotek implementacji natywnej
W składniku podstawowa logika typu ImageEnhancer znajduje się w kodzie natywnym, który znajduje się w różnych ImageEnhancer.dll zestawach generowanych dla każdego docelowego środowiska uruchomieniowego (ARM, x86 i x64). Aby uwzględnić je w pakiecie, odwołaj się do nich w sekcji <files> wraz z powiązanymi plikami zasobów PRI.
<?xml version="1.0"?>
<package >
<metadata>
...
</metadata>
<files>
...
<!-- DLLs and resources -->
<file src="..\ARM\Debug\ImageEnhancer\ImageEnhancer.dll" target="runtimes\win10-arm\native"/>
<file src="..\ARM\Debug\ImageEnhancer\ImageEnhancer.pri" target="runtimes\win10-arm\native"/>
<file src="..\ARM64\Debug\ImageEnhancer\ImageEnhancer.dll" target="runtimes\win10-arm64\native"/>
<file src="..\ARM64\Debug\ImageEnhancer\ImageEnhancer.pri" target="runtimes\win10-arm64\native"/>
<file src="..\x64\Debug\ImageEnhancer\ImageEnhancer.dll" target="runtimes\win10-x64\native"/>
<file src="..\x64\Debug\ImageEnhancer\ImageEnhancer.pri" target="runtimes\win10-x64\native"/>
<file src="..\Debug\ImageEnhancer\ImageEnhancer.dll" target="runtimes\win10-x86\native"/>
<file src="..\Debug\ImageEnhancer\ImageEnhancer.pri" target="runtimes\win10-x86\native"/>
</files>
</package>
Dodawanie obiektów docelowych
Następnie projekty C++ i JavaScript, które mogą korzystać z pakietu NuGet, potrzebują pliku .targets, aby zidentyfikować niezbędne pliki zestawu (assembly) i WINMD. (Projekty języka C# i Visual Basic wykonują to automatycznie). Utwórz ten plik, kopiując poniższy tekst do pliku ImageEnhancer.targets i zapisz go w tym samym folderze co plik .nuspec.
Uwaga: ten .targets plik musi mieć taką samą nazwę jak identyfikator pakietu (np. <Id> element w .nupspec pliku):
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ImageEnhancer-Platform Condition="'$(Platform)' == 'Win32'">x86</ImageEnhancer-Platform>
<ImageEnhancer-Platform Condition="'$(Platform)' != 'Win32'">$(Platform)</ImageEnhancer-Platform>
</PropertyGroup>
<ItemGroup Condition="'$(TargetPlatformIdentifier)' == 'UAP'">
<Reference Include="$(MSBuildThisFileDirectory)..\..\lib\uap10.0\ImageEnhancer.winmd">
<Implementation>ImageEnhancer.dll</Implementation>
</Reference>
<ReferenceCopyLocalPaths Include="$(MSBuildThisFileDirectory)..\..\runtimes\win10-$(ImageEnhancer-Platform)\native\ImageEnhancer.dll" />
</ItemGroup>
</Project>
Następnie odwołaj się do ImageEnhancer.targets w .nuspec pliku:
<?xml version="1.0"?>
<package >
<metadata>
...
</metadata>
<files>
...
<!-- .targets -->
<file src="ImageEnhancer.targets" target="build\native"/>
</files>
</package>
Końcowy plik .nuspec
Plik końcowy .nuspec powinien teraz wyglądać podobnie do poniższego, gdzie ponownie YOUR_NAME należy zastąpić odpowiednią wartością:
<?xml version="1.0"?>
<package >
<metadata>
<id>ImageEnhancer.YOUR_NAME</id>
<version>1.0.0</version>
<title>ImageEnhancer</title>
<authors>YOUR_NAME</authors>
<owners>YOUR_NAME</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Awesome Image Enhancer</description>
<releaseNotes>First Release</releaseNotes>
<copyright>Copyright 2016</copyright>
<tags>image enhancer imageenhancer</tags>
</metadata>
<files>
<!-- WinMd and IntelliSense -->
<file src="..\Debug\ImageEnhancer\ImageEnhancer.winmd" target="lib\uap10.0"/>
<file src="..\Debug\ImageEnhancer\ImageEnhancer.xml" target="lib\uap10.0"/>
<!-- XAML controls -->
<file src="Themes\Generic.xaml" target="lib\uap10.0\Themes"/>
<!-- DLLs and resources -->
<file src="..\ARM\Debug\ImageEnhancer\ImageEnhancer.dll" target="runtimes\win10-arm\native"/>
<file src="..\ARM\Debug\ImageEnhancer\ImageEnhancer.pri" target="runtimes\win10-arm\native"/>
<file src="..\ARM64\Debug\ImageEnhancer\ImageEnhancer.dll" target="runtimes\win10-arm64\native"/>
<file src="..\ARM64\Debug\ImageEnhancer\ImageEnhancer.pri" target="runtimes\win10-arm64\native"/>
<file src="..\x64\Debug\ImageEnhancer\ImageEnhancer.dll" target="runtimes\win10-x64\native"/>
<file src="..\x64\Debug\ImageEnhancer\ImageEnhancer.pri" target="runtimes\win10-x64\native"/>
<file src="..\Debug\ImageEnhancer\ImageEnhancer.dll" target="runtimes\win10-x86\native"/>
<file src="..\Debug\ImageEnhancer\ImageEnhancer.pri" target="runtimes\win10-x86\native"/>
<!-- .targets -->
<file src="ImageEnhancer.targets" target="build\native"/>
</files>
</package>
Spakuj składnik
Po zakończeniu tworzenia .nuspec referencji do wszystkich plików, które należy uwzględnić w pakiecie, możesz uruchomić polecenie pack
nuget pack ImageEnhancer.nuspec
To generuje ImageEnhancer.YOUR_NAME.1.0.0.nupkg. Otwórz ten plik w narzędziu, takim jak Eksplorator pakietów NuGet, i rozwiń wszystkie węzły, aby zobaczyć następującą zawartość:
Wskazówka
Plik .nupkg jest tylko plikiem ZIP z innym rozszerzeniem. Możesz również sprawdzić zawartość pakietu, zmieniając wartość .nupkg na .zip, ale pamiętaj, aby przywrócić rozszerzenie przed przekazaniem pakietu do nuget.org.
Aby udostępnić pakiet innym deweloperom, postępuj zgodnie z instrukcjami w temacie Publikowanie pakietu.