Vytvoření balíčků UPW

Univerzální platforma Windows (UPW) poskytuje společnou aplikační platformu pro každé zařízení, na kterém běží Windows 10. V rámci tohoto modelu můžou aplikace UPW volat rozhraní API WinRT, která jsou společná pro všechna zařízení, a také rozhraní API (včetně Win32 a .NET), která jsou specifická pro řadu zařízení, na které je aplikace spuštěná.

V tomto návodu vytvoříte balíček NuGet s nativní komponentou UPW (včetně ovládacího prvku XAML), který lze použít v spravovaných i nativních projektech.

Požadavky

  1. Visual Studio 2017 nebo Visual Studio 2015. Nainstalujte edici Community 2017 zdarma z visualstudio.com; můžete použít i edice Professional a Enterprise.

  2. rozhraní příkazového řádku NuGet. Stáhněte si nejnovější verzi nuget.exe z nuget.org/downloads a uložte ji do libovolného umístění (stažení je .exe přímo). Pak toto umístění přidejte do proměnné prostředí PATH, pokud ještě není.

Vytvoření komponenty prostředí Windows Runtime UPW

  1. V Visual Studio zvolte Soubor > nový > Project, rozbalte Windows univerzální uzel Visual C++ >>, vyberte šablonu prostředí Windows Runtime komponenty (Universal Windows), změňte název na ImageEnhancer a klikněte na OK. Po zobrazení výzvy přijměte výchozí hodnoty pro cílovou verzi a minimální verzi.

    Creating a new UWP Windows Runtime Component project

  2. Klikněte pravým tlačítkem myši na projekt v Průzkumník řešení, vyberte Přidat > novou položku, klikněte na uzel XAML visual C++>, vyberte Templated Control, změňte název na AwesomeImageControl.cpp a klikněte na Přidat:

    Adding a new XAML Templated Control item to the project

  3. Klikněte pravým tlačítkem myši na projekt v Průzkumník řešení a vyberte Vlastnosti. Na stránce Vlastnosti rozbalte položku Vlastnosti > konfigurace C/C++ a klikněte na Výstupní soubory. V podokně vpravo změňte hodnotu Generovat soubory dokumentace XML na Ano:

    Setting Generate XML Documentation Files to Yes

  4. Klikněte pravým tlačítkem myši na řešení , vyberte Batch Build, zaškrtněte tři pole Ladění v dialogovém okně, jak je znázorněno níže. Tím zajistíte, že při sestavování vygenerujete úplnou sadu artefaktů pro každý cílový systém, který Windows podporuje.

    Batch Build

  5. V dialogovém okně Dávkové sestavení a kliknutím na Sestavit ověřte projekt a vytvořte výstupní soubory, které potřebujete pro balíček NuGet.

Poznámka

V tomto názorném postupu použijete artefakty ladění pro balíček. V případě balíčku, který není ladicí, zkontrolujte možnosti vydané verze v dialogovém okně Batch Build a v následujících krocích se podívejte na výsledné složky vydané verze.

Vytvoření a aktualizace souboru .nuspec

Pokud chcete vytvořit počáteční .nuspec soubor, proveďte následující tři kroky. Následující části vás pak provedou dalšími potřebnými aktualizacemi.

  1. Otevřete příkazový řádek a přejděte do složky obsahující ImageEnhancer.vcxproj (bude to podsložka, ve které je soubor řešení).

  2. Spuštěním příkazu NuGet spec vygenerujte ImageEnhancer.nuspec (název souboru je převzat z názvu .vcxproj souboru):

    nuget spec
    
  3. Otevřete ImageEnhancer.nuspec ho v editoru a aktualizujte ho tak, aby odpovídal následujícímu, přičemž YOUR_NAME nahraďte příslušnou hodnotou. Konkrétně <id> musí být hodnota jedinečná v rámci nuget.org (viz zásady vytváření názvů popsané v části Vytvoření balíčku). Všimněte si také, že musíte také aktualizovat značky autora a popisu nebo se během kroku balení zobrazí chyba.

    <?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>
    

Poznámka

Pro balíčky vytvořené pro veřejnou spotřebu věnujte zvláštní pozornost <tags> prvku, protože tyto značky pomáhají ostatním najít váš balíček a pochopit, co dělá.

Přidání metadat Windows do balíčku

Komponenta prostředí Windows Runtime vyžaduje metadata, která popisují všechny jeho veřejně dostupné typy, což umožňuje využívat komponenty pro další aplikace a knihovny. Tato metadata jsou obsažena v souboru .winmd, který se vytvoří při kompilaci projektu a musí být součástí balíčku NuGet. Soubor XML s daty IntelliSense je také sestaven současně a měl by být také zahrnut.

Do souboru přidejte následující <files> uzel .nuspec :

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

Přidání obsahu XAML

Pokud chcete do komponenty zahrnout ovládací prvek XAML, musíte přidat soubor XAML, který má výchozí šablonu ovládacího prvku (vygenerovaný šablonou projektu). To také probíhá v <files> této části:

<?xml version="1.0"?>
<package >
    <metadata>
        ...
    </metadata>
    <files>
        ...

        <!-- XAML controls -->
        <file src="Themes\Generic.xaml" target="lib\uap10.0\Themes"/>

    </files>
</package>

Přidání nativních knihoven implementace

V rámci vaší komponenty je základní logika typu ImageEnhancer v nativním kódu, která je obsažena v různých ImageEnhancer.dll sestaveních generovaných pro každý cílový modul runtime (ARM, x86 a x64). Pokud je chcete zahrnout do balíčku, odkazujte na ně v <files> části spolu s přidruženými soubory prostředků .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>

Přidání .targets

Dále projekty C++ a JavaScriptu, které by mohly využívat váš balíček NuGet, potřebují soubor .targets k identifikaci potřebných sestavení a winmd souborů. (Projekty C# a Visual Basic to dělají automaticky.) Vytvořte tento soubor tak, že zkopírujete níže uvedený text ImageEnhancer.targets a uložíte ho .nuspec do stejné složky jako soubor. Poznámka: Tento .targets soubor musí mít stejný název jako ID balíčku (např. <Id> prvek v .nupspec souboru):

<?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>

Pak se podívejte do ImageEnhancer.targets souboru .nuspec :

<?xml version="1.0"?>
<package >
    <metadata>
        ...
    </metadata>
    <files>
        ...

        <!-- .targets -->
        <file src="ImageEnhancer.targets" target="build\native"/>

    </files>
</package>

Konečný .nuspec

Konečný .nuspec soubor by teď měl vypadat takto, kde by se měl znovu YOUR_NAME nahradit odpovídající hodnotou:

<?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>

Zabalení komponenty

Po dokončení .nuspec odkazování na všechny soubory, které musíte zahrnout do balíčku, jste připraveni spustit pack příkaz:

nuget pack ImageEnhancer.nuspec

To vygeneruje ImageEnhancer.YOUR_NAME.1.0.0.nupkg. Otevřete tento soubor v nástroji, jako je NuGet Průzkumník balíčků a rozbalte všechny uzly, zobrazí se následující obsah:

NuGet Package Explorer showing the ImageEnhancer package

Tip

Soubor .nupkg je pouze soubor ZIP s jinou příponou. Obsah balíčku můžete také prozkoumat tak, že změníte na .nupkg.zip, ale nezapomeňte rozšíření obnovit před nahráním balíčku do nuget.org.

Pokud chcete balíček zpřístupnit jiným vývojářům, postupujte podle pokynů k publikování balíčku.