Auf Englisch lesen

Freigeben über


Erstellen von UWP-Paketen (C#)

Die universelle Windows-Plattform (UWP) stellt eine allgemeine App-Plattform bereit für alle Windows 10-Geräte bereit. Innerhalb dieses Modells können UWP-Apps sowohl die WinRT-APIs aufrufen, die für alle Geräte verwendet werden, als auch die APIs (einschließlich Win32 und .NET), die spezifisch für die Gerätefamilie sind, auf der die App ausgeführt wird.

In dieser exemplarischen Vorgehensweise erstellen Sie ein NuGet-Paket mit einer C#-UWP-Komponente (einschließlich eines XAML-Steuerelements), das für verwaltete und native Projekte verwendet werden kann.

Voraussetzungen

  1. Visual Studio 2019. Installieren Sie die Community Edition 2019 kostenlos von visualstudio.com. Sie können auch die Professional- und Enterprise-Editionen verwenden.

  2. NuGet-CLI. Laden Sie die neuste Version von nuget.exe unter nuget.org/downloads herunter und speichern Sie das Tool an einem Ort Ihrer Wahl. (Der Download ist die .exe-Datei direkt.) Fügen Sie den Speicherort der Tooldatei zu Ihrer PATH-Umgebungsvariable hinzu, falls sie noch nicht vorhanden ist. Weitere Informationen finden Sie unter Installation von nuget.exe.

Erstellen einer UWP-Komponente für Windows-Runtime

  1. Wählen Sie in Visual Studio Datei > Neu > Projekt aus und suchen Sie nach „uwp c#“. Wählen Sie die Vorlage Komponente für Windows-Runtime (Universal Windows) und dann Weiter aus. Ändern Sie den Namen in ImageEnhancer und wählen Sie Erstellen aus. Übernehmen Sie die Standardwerte für „Zielversion“ und „Mindestens erforderliche Version“, wenn Sie dazu aufgefordert werden.

    Creating a new UWP Windows Runtime Component project

  2. Klicken Sie mit der rechten Maustaste auf das Projekt in Projektmappen-Explorer und klicken Sie auf > neues Element hinzufügen. Klicken Sie auf Steuerelement mit Vorlagen, ändern Sie den Namen in „AwesomeImageControl.cs“ und klicken Sie auf Hinzufügen:

    Adding a new XAML Templated Control item to the project

  3. Klicken Sie mit der rechten Maustaste auf das Projekt in Projektmappen-Explorer und wählen Sie Eigenschaften aus. Wählen Sie auf der Eigenschaftenseite die Registerkarte Build aus und aktivieren Sie die XML-Dokumentationsdatei:

    Setting Generate XML Documentation Files to Yes

  4. Klicken Sie mit der rechten Maustaste auf die Lösung und wählen Sie Batch Build aus. Wählen Sie die fünf Build-Boxen aus, wie in der folgenden Abbildung gezeigt. Damit stellen Sie sicher, dass alle Artefakte für jedes der von Windows unterstützten Zielsysteme generiert wurde, wenn Sie einen Build erstellen.

    Batch Build

  5. Klicken Sie im Dialogfeld „Batcherstellung“ auf Erstellen, um das Projekt zu überprüfen und die Ausgabedateien zu erstellen, die für das NuGet-Paket erforderlich sind.

Hinweis

In dieser exemplarischen Vorgehensweise werden die Debugartefakte für das Paket verwendet. Überprüfen Sie für Nichtdebugpakete stattdessen die Releaseoptionen im Dialogfeld „Batcherstellung“, und verwenden Sie in den folgenden Schritten die als Ergebnis angezeigten Ordner für Releases.

Erstellen und Aktualisieren der NUSPEC-Datei

Führen Sie die folgenden Schritte aus, um die erste .nuspec-Datei zu erstellen. Die folgenden Abschnitte führen Sie durch weitere notwendige Updates.

  1. Öffnen Sie eine Eingabeaufforderung und navigieren Sie zu dem Ordner, der die ImageEnhancer.csproj-Datei enthält. Dieser sollte ein Unterordner des Ordners sein, der die Lösungsdatei enthält.

  2. NuGet spec-Befehl ausführen, um die ImageEnhancer.nuspec-Datei zu generieren. Der Name der Datei wird aus dem Namen der .csroj-Datei übernommen.

    nuget spec
    
  3. Öffnen Sie ImageEnhancer.nuspec in einem Editor, und aktualisieren Sie die Datei, damit Sie dem Folgenden entspricht. Dabei wird YOUR_NAME durch einen passenden Wert ersetzt. Belassen Sie keinen der $propertyName$-Werte. Insbesondere der <id>-Wert muss auf nuget.org eindeutig sein. Informationen zu den Namenskonventionen finden Sie unter Creating a package (Erstellen eines Pakets). Beachten Sie außerdem, dass Sie ebenfalls die Tags für den Autor und die Beschreibung ändern müssen, damit beim Packen kein Fehler ausgelöst wird.

    <?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 2020</copyright>
        <tags>image enhancer imageenhancer</tags>
        </metadata>
    </package>
    

Hinweis

Bei Paketen, die für die öffentliche Nutzung bereitgestellt werden, sollten Sie besonders auf das <tags>-Element achten, da diese Tags andere Personen dabei unterstützen, nach Ihrem Paket zu suchen und dessen Zweck nachzuvollziehen.

Hinzufügen von Windows-Metadaten zum Paket

Eine Komponente für Windows-Runtime erfordert Metadaten, die alle öffentlich verfügbaren Typen beschreibt. Dadurch wird es anderen Apps und Bibliotheken ermöglicht, die Komponente zu nutzen. Die Metadaten sind in einer WINMD-Datei enthalten. Diese wird erstellt, wenn Sie das Projekt kompilieren und muss in Ihrem NuGet-Paket enthalten sein. Gleichzeitig wird außerdem eine XML-Datei mit IntelliSense-Daten erstellt, die ebenfalls enthalten sein sollte.

Fügen Sie der .nuspec-Datei folgenden <files>-Knoten hinzu:

<package>
    <metadata>
        ...
    </metadata>

    <files>
        <!-- WinMd and IntelliSense files -->
      <file src="bin\Debug\ImageEnhancer.winmd" target="lib\uap10.0"/>
      <file src="bin\Debug\ImageEnhancer.xml" target="lib\uap10.0"/>
    </files>
</package>

Hinzufügen von XAML-Inhalten

Wenn Sie Ihrer Komponente ein XAML-Steuerelement hinzufügen möchten, müssen Sie die XAML-Datei hinzufügen, die die Standardvorlage für das Steuerelement enthält. Diese wurde von der Projektvorlage generiert. Dies gilt ebenfalls für den Abschnitt <files>:

<?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 Bibliotheken für die Implementierung

Innerhalb Ihrer Komponente ist die Kernlogik des ImageEnhancer-Typs in nativem Code definiert. Dieser ist in den zahlreichen ImageEnhancer.winmd-Assemblys enthalten, die für jede Zielruntime (ARM, ARM64, x86 und x64) generiert werden. Verweisen Sie im Abschnitt <files> mithilfe der zugehörigen PRI-Ressourcendateien auf diese Assemblys, um diese in das Paket einzuschließen:

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

        <!-- WINMDs and resources -->
      <file src="bin\ARM\Debug\ImageEnhancer.winmd" target="runtimes\win10-arm"/>
      <file src="bin\ARM\Debug\ImageEnhancer.pri" target="runtimes\win10-arm"/>

      <file src="bin\ARM64\Debug\ImageEnhancer.winmd" target="runtimes\win10-arm64"/>
      <file src="bin\ARM64\Debug\ImageEnhancer.pri" target="runtimes\win10-arm64"/>

      <file src="bin\x64\Debug\ImageEnhancer.winmd" target="runtimes\win10-x64"/>
      <file src="bin\x64\Debug\ImageEnhancer.pri" target="runtimes\win10-x64"/>

      <file src="bin\x86\Debug\ImageEnhancer.winmd" target="runtimes\win10-x86"/>
      <file src="bin\x86\Debug\ImageEnhancer.pri" target="runtimes\win10-x86"/>

    </files>
</package>

Endgültige NUSPEC-Datei

Die endgültige .nuspec-Datei sollte nun folgendermaßen aussehen, wobei Sie erneut YOUR_NAME durch einen passenden Wert ersetzen sollten:

<?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 2020</copyright>
    <tags>image enhancer imageenhancer</tags>
    </metadata>
    <files>
    <!-- WinMd and IntelliSense -->
      <file src="bin\Debug\ImageEnhancer.winmd" target="lib\uap10.0"/>
      <file src="bin\Debug\ImageEnhancer.xml" target="lib\uap10.0"/>

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

    <!-- WINMDs and resources -->
      <file src="bin\ARM\Debug\ImageEnhancer.winmd" target="runtimes\win10-arm"/>
      <file src="bin\ARM\Debug\ImageEnhancer.pri" target="runtimes\win10-arm"/>

      <file src="bin\ARM64\Debug\ImageEnhancer.winmd" target="runtimes\win10-arm64"/>
      <file src="bin\ARM64\Debug\ImageEnhancer.pri" target="runtimes\win10-arm64"/>

      <file src="bin\x64\Debug\ImageEnhancer.winmd" target="runtimes\win10-x64"/>
      <file src="bin\x64\Debug\ImageEnhancer.pri" target="runtimes\win10-x64"/>

      <file src="bin\x86\Debug\ImageEnhancer.winmd" target="runtimes\win10-x86"/>
      <file src="bin\x86\Debug\ImageEnhancer.pri" target="runtimes\win10-x86"/>

    </files>
</package>

Packen der Komponente

Mithilfe der vollständigen .nuspec-Datei, die auf alle Dateien verweist, die Sie in das Paket einfügen müssen, können Sie jetzt den Befehl nuget pack ausführen:

nuget pack ImageEnhancer.nuspec

Dadurch wird die Datei 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, werden Ihnen folgende Inhalte angezeigt:

NuGet Package Explorer showing the ImageEnhancer package

Tipp

Bei einer .nupkg-Datei handelt es sich um eine ZIP-Datei mit einer anderen Erweiterung. Sie können auch die Paketinhalte untersuchen, indem Sie .nupkg in .zip ändern. Denken Sie jedoch daran, die Erweiterung wiederherzustellen, bevor Sie ein Paket auf nuget.org hochladen.

Befolgen Sie die Anweisungen unter Veröffentlichen eines Pakets, um Ihr Paket für andere Entwickler zur Verfügung zu stellen.