Udostępnij za pośrednictwem


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

  1. 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.

  2. interfejs wiersza polecenia NuGet. Pobierz najnowszą wersję z nuget.exenuget.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

  1. 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.

    Creating a new UWP Windows Runtime Component project

  2. 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:

    Adding a new XAML Templated Control item to the project

  3. 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:

    Setting Generate XML Documentation Files to Yes

  4. 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ą.

    Batch Build

  5. 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.

  1. 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).

  2. Uruchom polecenie NuGetspec, aby wygenerować ImageEnhancer.nuspec (nazwa pliku jest pobierana z nazwy .vcxproj pliku):

    nuget spec
    
  3. 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.nupkgpolecenia . 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ść:

NuGet Package Explorer showing the ImageEnhancer package

Porada

.nupkg Plik to tylko plik ZIP z innym rozszerzeniem. Możesz również sprawdzić zawartość pakietu, zmieniając wartość .nupkg.zipna , 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.