Vytváření balíčků pro Xamarin pomocí Visual Studio 2017 nebo 2019
Balíček pro Xamarin obsahuje kód, který používá nativní rozhraní API pro iOS, Android a Windows v závislosti na operačním systému za běhu. I když je to jednoduché, je vhodnější umožnit vývojářům využívat balíček z knihoven PCL nebo .NET Standard prostřednictvím společné oblasti rozhraní API.
V tomto názorném postupu použijete Visual Studio 2017 nebo 2019 k vytvoření balíčku NuGet pro různé platformy, který lze použít v mobilních projektech v iOS, Android a Windows.
- Požadavky
- Vytvoření struktury projektu a abstrakce kódu
- Psaní kódu specifického pro platformu
- Vytvoření a aktualizace souboru .nuspec
- Zabalení komponenty
- Související témata
Požadavky
- Visual Studio 2017 nebo 2019 s Univerzální platforma Windows (UPW) a Xamarinem. Nainstalujte si Community edici zdarma z visualstudio.com. Samozřejmě můžete používat i edice Professional a Enterprise. Pokud chcete zahrnout nástroje pro UPW a Xamarin, vyberte vlastní instalaci a zkontrolujte příslušné možnosti.
- 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í. Potom přidejte toto umístění do proměnné prostředí PATH, pokud ještě není.
Poznámka
nuget.exe je samotný nástroj rozhraní příkazového řádku, nikoli instalační program, takže místo jeho spuštění nezapomeňte stažený soubor uložit z prohlížeče.
Vytvoření struktury projektu a abstrakce kódu
Stáhněte a spusťte rozšíření Šablony modulů plug-in pro více platforem pro Visual Studio. Tyto šablony usnadňují vytvoření potřebné struktury projektu pro tento názorný postup.
V Visual Studio 2017 vyhledejte soubor > nový > Project, vyberte
Plugin
šablonu modulu plug-in knihovny .NET Standard pro různé platformy, změňte název na LoggingLibrary a klikněte na TLAČÍTKO OK.V Visual Studio 2019 vyhledejte soubor > nový > Project, vyhledejte
Plugin
, vyberte šablonu modulu plug-in knihovny .NET Standard pro různé platformy a klikněte na tlačítko Další.Změňte název na LoggingLibrary a klikněte na Vytvořit.
Výsledné řešení obsahuje dva sdílené projekty spolu s celou řadou projektů specifických pro platformu:
- Projekt
ILoggingLibrary
, který je obsažen vILoggingLibrary.shared.cs
souboru, definuje veřejné rozhraní (oblast rozhraní API surface) komponenty. Tady definujete rozhraní pro vaši knihovnu. - Druhý sdílený projekt obsahuje kód, který
CrossLoggingLibrary.shared.cs
vyhledá implementaci konkrétní platformy abstraktního rozhraní za běhu. Tento soubor obvykle nemusíte upravovat. - Projekty specifické pro platformu, jako
LoggingLibrary.android.cs
je například , obsahují nativní implementaci rozhraní v příslušnýchLoggingLibraryImplementation.cs
souborech (VS 2017) neboLoggingLibrary.<PLATFORM>.cs
(VS 2019). Tady vytvoříte kód knihovny.
Ve výchozím nastavení soubor ILoggingLibrary
ILoggingLibrary.shared.cs projektu obsahuje definici rozhraní, ale žádné metody. Pro účely tohoto návodu přidejte metodu Log
následujícím způsobem:
using System;
using System.Collections.Generic;
using System.Text;
namespace Plugin.LoggingLibrary
{
/// <summary>
/// Interface for LoggingLibrary
/// </summary>
public interface ILoggingLibrary
{
/// <summary>
/// Log a message
/// </summary>
void Log(string text);
}
}
Psaní kódu specifického pro platformu
Pokud chcete implementovat implementaci rozhraní specifickou pro platformu ILoggingLibrary
a její metody, postupujte takto:
LoggingLibraryImplementation.cs
Otevřete soubor (VS 2017) neboLoggingLibrary.<PLATFORM>.cs
(VS 2019) každého projektu platformy a přidejte potřebný kód. Například (pomocíAndroid
projektu platformy):using System; using System.Collections.Generic; using System.Text; namespace Plugin.LoggingLibrary { /// <summary> /// Implementation for Feature /// </summary> public class LoggingLibraryImplementation : ILoggingLibrary { /// <summary> /// Log a message /// </summary> public void Log(string text) { throw new NotImplementedException("Called Log on Android"); } } }
Tuto implementaci opakujte v projektech pro každou platformu, kterou chcete podporovat.
Klikněte pravým tlačítkem na řešení a vyberte Sestavit řešení a zkontrolujte svou práci a vytvořte artefakty, které zabalíte dál. Pokud se zobrazí chyby týkající se chybějících odkazů, klikněte pravým tlačítkem na řešení, vyberte Obnovit NuGet Balíčky pro instalaci závislostí a opětovné sestavení.
Poznámka
Pokud používáte Visual Studio 2019, před výběrem možnosti Obnovit NuGet Balíčky a pokusem o opětovné sestavení je nutné změnit verzi MSBuild.Sdk.Extras
na 2.0.54
.LoggingLibrary.csproj
K tomuto souboru se dostanete jenom tak, že kliknete pravým tlačítkem myši na projekt (pod řešením) a vyberete Unload Project
, po kterém kliknete pravým tlačítkem myši na uvolněný projekt a vyberete Edit LoggingLibrary.csproj
.
Poznámka
K sestavení pro iOS potřebujete síťovaný Mac připojený k Visual Studio, jak je popsáno v tématu Úvod do Xamarin.iOS pro Visual Studio. Pokud nemáte k dispozici Mac, vymažte iOS projekt v nástroji Configuration Manager (krok 3 výše).
Vytvoření a aktualizace souboru .nuspec
Otevřete příkazový řádek, přejděte do
LoggingLibrary
složky, která je o jednu úroveň níže, kde.sln
je soubor, a spuštěním příkazu NuGetspec
vytvořte počátečníPackage.nuspec
soubor:nuget spec
Přejmenujte tento soubor
LoggingLibrary.nuspec
a otevřete ho v editoru.Aktualizujte soubor tak, aby odpovídal následujícímu, a nahraďte YOUR_NAME odpovídající hodnotou. Hodnota
<id>
, konkrétně musí být jedinečná napříč nuget.org (viz konvence vytváření názvů popsané v tématu 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>LoggingLibrary.YOUR_NAME</id> <version>1.0.0</version> <title>LoggingLibrary</title> <authors>YOUR_NAME</authors> <owners>YOUR_NAME</owners> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>Awesome application logging utility</description> <releaseNotes>First release</releaseNotes> <copyright>Copyright 2018</copyright> <tags>logger logging logs</tags> </metadata> </package>
Tip
Verzi -alpha
-beta
balíčku můžete označovat jako předběžnou verzi nebo -rc
označit jako předběžnou verzi. Další informace o verzích před vydáním najdete v předběžné verzi.
Přidání referenčních sestavení
Pokud chcete zahrnout referenční sestavení specifická pro platformu <files>
, přidejte do elementu LoggingLibrary.nuspec
podle potřeby podporované platformy následující:
<!-- Insert below <metadata> element -->
<files>
<!-- Cross-platform reference assemblies -->
<file src="Plugin.LoggingLibrary\bin\Release\Plugin.LoggingLibrary.dll" target="lib\netstandard1.4\Plugin.LoggingLibrary.dll" />
<file src="Plugin.LoggingLibrary\bin\Release\Plugin.LoggingLibrary.xml" target="lib\netstandard1.4\Plugin.LoggingLibrary.xml" />
<file src="Plugin.LoggingLibrary.Abstractions\bin\Release\Plugin.LoggingLibrary.Abstractions.dll" target="lib\netstandard1.4\Plugin.LoggingLibrary.Abstractions.dll" />
<file src="Plugin.LoggingLibrary.Abstractions\bin\Release\Plugin.LoggingLibrary.Abstractions.xml" target="lib\netstandard1.4\Plugin.LoggingLibrary.Abstractions.xml" />
<!-- iOS reference assemblies -->
<file src="Plugin.LoggingLibrary.iOS\bin\Release\Plugin.LoggingLibrary.dll" target="lib\Xamarin.iOS10\Plugin.LoggingLibrary.dll" />
<file src="Plugin.LoggingLibrary.iOS\bin\Release\Plugin.LoggingLibrary.xml" target="lib\Xamarin.iOS10\Plugin.LoggingLibrary.xml" />
<!-- Android reference assemblies -->
<file src="Plugin.LoggingLibrary.Android\bin\Release\Plugin.LoggingLibrary.dll" target="lib\MonoAndroid10\Plugin.LoggingLibrary.dll" />
<file src="Plugin.LoggingLibrary.Android\bin\Release\Plugin.LoggingLibrary.xml" target="lib\MonoAndroid10\Plugin.LoggingLibrary.xml" />
<!-- UWP reference assemblies -->
<file src="Plugin.LoggingLibrary.UWP\bin\Release\Plugin.LoggingLibrary.dll" target="lib\UAP10\Plugin.LoggingLibrary.dll" />
<file src="Plugin.LoggingLibrary.UWP\bin\Release\Plugin.LoggingLibrary.xml" target="lib\UAP10\Plugin.LoggingLibrary.xml" />
</files>
Poznámka
Pokud chcete zkrátit názvy souborů DLL a XML, klikněte pravým tlačítkem myši na libovolný daný projekt, vyberte kartu Knihovna a změňte názvy sestavení.
Přidání závislostí
Pokud máte specifické závislosti pro nativní implementace, použijte <dependencies>
element s elementy <group>
k jejich určení, například:
<!-- Insert within the <metadata> element -->
<dependencies>
<group targetFramework="MonoAndroid">
<!--MonoAndroid dependencies go here-->
</group>
<group targetFramework="Xamarin.iOS10">
<!--Xamarin.iOS10 dependencies go here-->
</group>
<group targetFramework="uap">
<!--uap dependencies go here-->
</group>
</dependencies>
Například následující nastavení iTextSharp jako závislosti pro cíl UAP:
<dependencies>
<group targetFramework="uap">
<dependency id="iTextSharp" version="5.5.9" />
</group>
</dependencies>
Konečný .nuspec
Konečný .nuspec
soubor by teď měl vypadat nějak takto, kde by se měl znovu YOUR_NAME nahradit odpovídající hodnotou:
<?xml version="1.0"?>
<package >
<metadata>
<id>LoggingLibrary.YOUR_NAME</id>
<version>1.0.0</version>
<title>LoggingLibrary</title>
<authors>YOUR_NAME</authors>
<owners>YOUR_NAME</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Awesome application logging utility</description>
<releaseNotes>First release</releaseNotes>
<copyright>Copyright 2018</copyright>
<tags>logger logging logs</tags>
<dependencies>
<group targetFramework="MonoAndroid">
<!--MonoAndroid dependencies go here-->
</group>
<group targetFramework="Xamarin.iOS10">
<!--Xamarin.iOS10 dependencies go here-->
</group>
<group targetFramework="uap">
<dependency id="iTextSharp" version="5.5.9" />
</group>
</dependencies>
</metadata>
<files>
<!-- Cross-platform reference assemblies -->
<file src="Plugin.LoggingLibrary\bin\Release\Plugin.LoggingLibrary.dll" target="lib\netstandard1.4\Plugin.LoggingLibrary.dll" />
<file src="Plugin.LoggingLibrary\bin\Release\Plugin.LoggingLibrary.xml" target="lib\netstandard1.4\Plugin.LoggingLibrary.xml" />
<file src="Plugin.LoggingLibrary.Abstractions\bin\Release\Plugin.LoggingLibrary.Abstractions.dll" target="lib\netstandard1.4\Plugin.LoggingLibrary.Abstractions.dll" />
<file src="Plugin.LoggingLibrary.Abstractions\bin\Release\Plugin.LoggingLibrary.Abstractions.xml" target="lib\netstandard1.4\Plugin.LoggingLibrary.Abstractions.xml" />
<!-- iOS reference assemblies -->
<file src="Plugin.LoggingLibrary.iOS\bin\Release\Plugin.LoggingLibrary.dll" target="lib\Xamarin.iOS10\Plugin.LoggingLibrary.dll" />
<file src="Plugin.LoggingLibrary.iOS\bin\Release\Plugin.LoggingLibrary.xml" target="lib\Xamarin.iOS10\Plugin.LoggingLibrary.xml" />
<!-- Android reference assemblies -->
<file src="Plugin.LoggingLibrary.Android\bin\Release\Plugin.LoggingLibrary.dll" target="lib\MonoAndroid10\Plugin.LoggingLibrary.dll" />
<file src="Plugin.LoggingLibrary.Android\bin\Release\Plugin.LoggingLibrary.xml" target="lib\MonoAndroid10\Plugin.LoggingLibrary.xml" />
<!-- UWP reference assemblies -->
<file src="Plugin.LoggingLibrary.UWP\bin\Release\Plugin.LoggingLibrary.dll" target="lib\UAP10\Plugin.LoggingLibrary.dll" />
<file src="Plugin.LoggingLibrary.UWP\bin\Release\Plugin.LoggingLibrary.xml" target="lib\UAP10\Plugin.LoggingLibrary.xml" />
</files>
</package>
Zabalení komponenty
Po dokončení .nuspec
odkazování na všechny soubory, které je potřeba zahrnout do balíčku, jste připraveni spustit pack
příkaz:
nuget pack LoggingLibrary.nuspec
Tím se vygeneruje LoggingLibrary.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 změnou na , ale nezapomeňte rozšíření obnovit před nahráním .nupkg
.zip
balíčku do nuget.org.
Pokud chcete balíček zpřístupnit ostatním vývojářům, postupujte podle pokynů k publikování balíčku.