Tworzenie pakietów platformy UWP
Platforma platforma uniwersalna systemu Windows (UWP) udostępnia wspólną platformę aplikacji dla każdego urządzenia z systemem Windows 10. W ramach tego 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 2017 bezpłatnie od visualstudio.com. Możesz również korzystać z wersji Professional i Enterprise.
interfejs wiersza polecenia NuGet. Pobierz najnowszą wersję z
nuget.exe
nuget.org/downloads, zapisując ją w wybranej lokalizacji (pobieranie jest.exe
bezpośrednio). Następnie dodaj lokalizację do zmiennej środowiskowej PATH, jeśli jeszcze nie jest.
Tworzenie składnika środowisko wykonawcze systemu Windows platformy uniwersalnej systemu Windows
W Visual Studio wybierz pozycję Plik > Nowy > Project, rozwiń węzeł Uniwersalny visual C++ > Windows>, wybierz szablon składnika środowisko wykonawcze systemu Windows (universal Windows), zmień nazwę na ImageEnhancer, a następnie kliknij przycisk OK. Po wyświetleniu monitu zaakceptuj wartości domyślne dla wersji docelowej i minimalnej wersji.
Kliknij prawym przyciskiem myszy projekt w Eksplorator rozwiązań, wybierz pozycję Dodaj > nowy element, kliknij węzeł Visual C++ > XAML, wybierz pozycję Kontrolka szablonu, zmień nazwę na AwesomeImageControl.cpp, a następnie kliknij przycisk Dodaj:
Kliknij prawym przyciskiem myszy projekt w Eksplorator rozwiązań i wybierz polecenie Właściwości. Na stronie Właściwości rozwiń węzeł Właściwości > konfiguracji C/C++ i kliknij pozycję Pliki wyjściowe. W okienku po prawej stronie zmień wartość pozycji Generuj pliki dokumentacji XML na Tak:
Kliknij rozwiązanie prawym przyciskiem myszy, wybierz pozycję Kompilacja usługi Batch, zaznacz trzy pola debugowania w oknie dialogowym, jak pokazano poniżej. Dzięki temu podczas tworzenia kompilacji generowany jest pełny zestaw artefaktów dla każdego z systemów docelowych, które Windows obsługują.
W oknie dialogowym Kompilacja usługi Batch kliknij pozycję Skompiluj, aby zweryfikować projekt i utworzyć pliki wyjściowe potrzebne dla pakietu NuGet.
Uwaga
W tym przewodniku użyjesz artefaktów debugowania dla pakietu. W przypadku pakietu innego niż debugowanie sprawdź opcje wydania w oknie dialogowym Kompilacja usługi Batch i zapoznaj się z wynikowym folderami wydania w poniższych krokach.
Tworzenie i aktualizowanie pliku nuspec
Aby utworzyć plik początkowy .nuspec
, wykonaj trzy poniższe kroki. Poniższe sekcje prowadzą 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.vcxproj
pliku):nuget spec
Otwórz
ImageEnhancer.nuspec
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 podczas kroku pakowania należy również zaktualizować tagi autora i opisu.<?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
W przypadku pakietów utworzonych do użytku publicznego zwróć szczególną uwagę na <tags>
element, ponieważ te tagi pomagają innym osobom znaleźć pakiet i zrozumieć, co robi.
Dodawanie metadanych Windows do pakietu
Składnik środowisko wykonawcze systemu Windows 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 IntelliSense jest również kompilowany w tym samym czasie i powinien być również 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). Jest to również dostępne <files>
w sekcji:
<?xml version="1.0"?>
<package >
<metadata>
...
</metadata>
<files>
...
<!-- XAML controls -->
<file src="Themes\Generic.xaml" target="lib\uap10.0\Themes"/>
</files>
</package>
Dodawanie natywnych bibliotek implementacji
W ramach składnika podstawowa logika typu ImageEnhancer jest 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 <files>
sekcji wraz z skojarzonymi 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 .targets
Następnie projekty C++ i JavaScript, które mogą korzystać z pakietu NuGet, potrzebują pliku .targets, aby zidentyfikować niezbędne pliki zestawu i winmd. (Projekty w języku C# i Visual Basic są wykonywane automatycznie). Utwórz ten plik, kopiując poniższy tekst i ImageEnhancer.targets
zapisując go w tym samym folderze co .nuspec
plik. 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 zapoznaj się z ImageEnhancer.targets
artykułem w pliku .nuspec
:
<?xml version="1.0"?>
<package >
<metadata>
...
</metadata>
<files>
...
<!-- .targets -->
<file src="ImageEnhancer.targets" target="build\native"/>
</files>
</package>
Final .nuspec
Plik końcowy .nuspec
powinien teraz wyglądać następująco, 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 .nuspec
odwoływania się do wszystkich plików, które należy uwzględnić w pakiecie, możesz uruchomić pack
polecenie:
nuget pack ImageEnhancer.nuspec
Spowoduje to wygenerowanie ImageEnhancer.YOUR_NAME.1.0.0.nupkg
polecenia . Otwarcie tego pliku w narzędziu, takim jak eksplorator pakietów NuGet i rozwinięcie wszystkich węzłów, jest widoczna następująca zawartość:
Porada
.nupkg
Plik to tylko plik ZIP z innym rozszerzeniem. Możesz również sprawdzić zawartość pakietu, zmieniając wartość .nupkg
.zip
na , ale pamiętaj, aby przywrócić rozszerzenie przed przekazaniem pakietu do nuget.org.
Aby udostępnić pakiet innym deweloperom, postępuj zgodnie z instrukcjami dotyczącymi publikowania pakietu.