Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Universelle Windows-Plattform (UWP) stellt eine allgemeine App-Plattform für jedes Gerät bereit, auf dem Windows 10 ausgeführt wird. In diesem Modell können UWP-Apps sowohl winRT-APIs aufrufen, die für alle Geräte gemeinsam sind, als auch APIs (einschließlich Win32 und .NET), die für die Gerätefamilie spezifisch sind, auf der die App ausgeführt wird.
In dieser exemplarischen Vorgehensweise erstellen Sie ein NuGet-Paket mit einer systemeigenen UWP-Komponente (einschließlich eines XAML-Steuerelements), das sowohl in verwalteten als auch in nativen Projekten verwendet werden kann.
Voraussetzungen
Visual Studio 2017 oder Visual Studio 2015. Installieren Sie die Community Edition 2017 kostenlos von visualstudio.com; Sie können auch die Professional- und Enterprise-Editionen verwenden.
NuGet CLI. Laden Sie die neueste Version von
nuget.exevon nuget.org/downloads herunter und speichern Sie sie an einem Speicherort Ihrer Wahl (der Download ist.exedirekt). Fügen Sie diesen Speicherort dann ihrer PATH-Umgebungsvariablen hinzu, wenn sie noch nicht vorhanden ist.
Erstellen einer UWP-Windows-Runtime-Komponente
In Visual Studio, wählen Sie Datei > Neu > Projekt aus, erweitern Sie den Knoten Visual C++ > Windows > Universal, wählen Sie die Windows-Runtime-Komponenten-Vorlage (Universal Windows) aus, ändern Sie den Namen in "ImageEnhancer", und klicken Sie auf "OK". Übernehmen Sie die Standardwerte für die Zielversion und die Mindestversion, wenn Sie dazu aufgefordert werden.
Klicken Sie mit der rechten Maustaste auf das Projekt im Projektmappen-Explorer, wählen Sie Zum > Neues Element hinzufügen aus, klicken Sie auf den Knoten Visual C++ > XAML, wählen Sie Templated Control aus, ändern Sie den Namen in AwesomeImageControl.cpp, und klicken Sie auf Hinzufügen:
Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie Properties. Erweitern Sie auf der Seite "Eigenschaften" Configuration-Eigenschaften > C/C++, und klicken Sie auf Output-Dateien. Ändern Sie im Bereich auf der rechten Seite den Wert für "XML-Dokumentationsdateien generieren " in "Ja":
Klicken Sie mit der rechten Maustaste auf die Lösung , wählen Sie "Batchbuild" aus, aktivieren Sie die drei Debugfelder im Dialogfeld wie unten dargestellt. Dadurch wird sichergestellt, dass Sie bei einem Build einen vollständigen Satz von Artefakten für jedes zielsystem generieren, das Windows unterstützt.
Klicken Sie im Dialogfeld "Batchbuild" auf " Erstellen ", um das Projekt zu überprüfen und die Ausgabedateien zu erstellen, die Sie für das NuGet-Paket benötigen.
Hinweis
In dieser Anleitung verwenden Sie die Debug-Artefakte für das Paket. Überprüfen Sie für nicht debuggende Pakete stattdessen die Versionsoptionen im Dialogfeld "Batchbuild", und verweisen Sie in den folgenden Schritten auf die resultierenden Releaseordner.
Erstellen und Aktualisieren der NUSPEC-Datei
Führen Sie die folgenden drei Schritte aus, um die erste .nuspec Datei zu erstellen. Die folgenden Abschnitte führen Sie durch andere erforderliche Updates.
Öffnen Sie eine Eingabeaufforderung, und navigieren Sie zu dem Ordner, der enthält
ImageEnhancer.vcxproj(dies ist ein Unterordner darunter, in dem sich die Lösungsdatei befindet).Führen Sie den NuGet-Befehl
specaus, um die Datei zu generierenImageEnhancer.nuspec(der Name der Datei stammt aus dem Namen der.vcxprojDatei):nuget specÖffnen Sie
ImageEnhancer.nuspecin einem Editor, und aktualisieren Sie es so, dass es dem folgenden entspricht. Ersetzen Sie YOUR_NAME durch einen geeigneten Wert. Der<id>Wert muss insbesondere für nuget.org eindeutig sein (siehe die benennungskonventionen, die im Erstellen eines Pakets beschrieben werden). Beachten Sie außerdem, dass Sie auch die Autoren- und Beschreibungstags aktualisieren müssen oder während des Verpackungsschritts einen Fehler erhalten.<?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>
Hinweis
Bei Paketen, die für den öffentlichen Gebrauch entwickelt wurden, achten Sie besonders auf das <tags> Element, da diese Tags anderen helfen, Ihr Paket zu finden und zu verstehen, was es tut.
Hinzufügen Windows Metadaten zum Paket
Eine Windows-Runtime Komponente erfordert Metadaten, die alle öffentlich verfügbaren Typen beschreiben, wodurch andere Apps und Bibliotheken die Komponente nutzen können. Diese Metadaten sind in einer WINMD-Datei enthalten, die beim Kompilieren des Projekts erstellt wird und in Ihr NuGet-Paket eingeschlossen werden muss. Eine XML-Datei mit IntelliSense-Daten wird ebenfalls gleichzeitig erstellt und sollte ebenfalls einbezogen werden.
Fügen Sie der <files> Datei den folgenden .nuspec Knoten hinzu:
<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>
Hinzufügen von XAML-Inhalten
Um ein XAML-Steuerelement in Ihre Komponente aufzunehmen, müssen Sie die XAML-Datei hinzufügen, die die Standardvorlage für das Steuerelement enthält (wie von der Projektvorlage generiert). Dies gilt auch für den <files> Abschnitt:
<?xml version="1.0"?>
<package >
<metadata>
...
</metadata>
<files>
...
<!-- XAML controls -->
<file src="Themes\Generic.xaml" target="lib\uap10.0\Themes"/>
</files>
</package>
Hinzufügen der nativen Implementierungsbibliotheken
Innerhalb der Komponente befindet sich die Kernlogik des ImageEnhancer-Typs in systemeigenem Code, der in den verschiedenen ImageEnhancer.dll Assemblys enthalten ist, die für jede Ziellaufzeit (ARM, x86 und x64) generiert werden. Um diese in das Paket einzuschließen, verweisen Sie auf sie im <files> Abschnitt zusammen mit den zugehörigen PRI-Ressourcendateien:
<?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>
Hinzufügen von .targets
Als Nächstes benötigen C++- und JavaScript-Projekte, die möglicherweise Ihr NuGet-Paket verwenden, eine .targets-Datei, um die erforderlichen Assembly- und Winmd-Dateien zu identifizieren. (Dies geschieht automatisch in C#- und Visual Basic Projekten.) Erstellen Sie diese Datei, indem Sie den folgenden Text in ImageEnhancer.targets kopieren und im selben Ordner wie die Datei .nuspec speichern.
Hinweis: Diese .targets Datei muss derselbe Name wie die Paket-ID sein (z. B. das <Id> Element in der .nupspec Datei):
<?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>
Verweisen Sie dann auf ImageEnhancer.targets in Ihrer .nuspec Datei.
<?xml version="1.0"?>
<package >
<metadata>
...
</metadata>
<files>
...
<!-- .targets -->
<file src="ImageEnhancer.targets" target="build\native"/>
</files>
</package>
Final .nuspec
Die endgültige .nuspec Datei sollte nun wie folgt aussehen, wobei erneut YOUR_NAME durch einen geeigneten Wert ersetzt werden sollte:
<?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>
Packen der Komponente
Mit dem abgeschlossenen .nuspec, das auf alle Dateien verweist, die Sie in das Paket aufnehmen müssen, sind Sie bereit, den pack Befehl auszuführen.
nuget pack ImageEnhancer.nuspec
Dadurch wird ImageEnhancer.YOUR_NAME.1.0.0.nupkg generiert. Wenn Sie diese Datei in einem Tool wie dem NuGet-Paket-Explorer öffnen und alle Knoten erweitern, wird der folgende Inhalt angezeigt:
Tipp
Eine .nupkg Datei ist nur eine ZIP-Datei mit einer anderen Erweiterung. Sie können den Paketinhalt auch untersuchen, indem Sie .nupkg in .zip ändern, aber denken Sie daran, die Erweiterung wiederherzustellen, bevor Sie ein Paket auf nuget.org hochladen.
Um Ihr Paket anderen Entwicklern zur Verfügung zu stellen, befolgen Sie die Anweisungen zum Veröffentlichen eines Pakets.