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
Visual Studio 2017 nebo Visual Studio 2015. Nainstalujte edici Community 2017 zdarma z visualstudio.com; můžete použít i edice Professional a Enterprise.
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
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.
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:
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:
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.
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.
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í).Spuštěním příkazu NuGet
spec
vygenerujteImageEnhancer.nuspec
(název souboru je převzat z názvu.vcxproj
souboru):nuget spec
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:
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.