Aracılığıyla paylaş


Visual Studio 2017 veya 2019 ile Xamarin için paketler oluşturma

Xamarin paketi, çalışma zamanı işletim sistemine bağlı olarak iOS, Android ve Windows yerel API'ler kullanan kod içerir. Bunu yapmak kolay olsa da, geliştiricilerin paketi ortak bir API yüzey alanı aracılığıyla bir PCL veya .NET Standard kitaplıklarından kullanmasına izin vermek tercih edilir.

Bu kılavuzda iOS, Android ve Windows mobil projelerinde kullanılabilecek platformlar arası bir NuGet paketi oluşturmak için Visual Studio 2017 veya 2019'u kullanırsınız.

  1. Önkoşullar
  2. Proje yapısını ve soyutlama kodunu oluşturma
  3. Platforma özgü kodunuzu yazma
  4. .nuspec dosyasını oluşturma ve güncelleştirme
  5. Bileşeni paketleme
  6. İlgili konular

Önkoşullar

  1. Evrensel Windows Platformu (UWP) ve Xamarin ile Visual Studio 2017 veya 2019. Community sürümünü visualstudio.com ücretsiz olarak yükleyin; Professional ve Enterprise sürümlerini de kullanabilirsiniz. UWP ve Xamarin araçlarını eklemek için Özel yükleme'yi seçin ve uygun seçenekleri işaretleyin.
  2. CLI'NuGet. nuget.org/downloads nuget.exe en son sürümünü indirin ve istediğiniz konuma kaydedin. Ardından, henüz değilse path ortam değişkeninize bu konumu ekleyin.

Not

nuget.exe, yükleyici değil CLI aracının kendisidir, bu nedenle indirilen dosyayı çalıştırmak yerine tarayıcınızdan kaydettiğinizden emin olun.

Proje yapısını ve soyutlama kodunu oluşturma

  1. Visual Studio için Platformlar Arası .NET Standart Eklenti Şablonları uzantısını indirin ve çalıştırın. Bu şablonlar, bu kılavuz için gerekli proje yapısını oluşturmayı kolaylaştırır.

  2. Visual Studio 2017'de Dosya > Yeni > Project, araması Pluginyapın, Platformlar Arası .NET Standart Kitaplık Eklentisi şablonunu seçin, adı LoggingLibrary olarak değiştirin ve Tamam'a tıklayın.

    New Blank App (Xamarin.Forms Portable) project in VS 2017

    Visual Studio 2019'da Dosya > Yeni > Project, araması Pluginyapın, Platformlar Arası .NET Standart Kitaplık Eklentisi şablonunu seçin ve İleri'ye tıklayın.

    New Blank App (Xamarin.Forms Portable) project in VS 2019

    Adı LoggingLibrary olarak değiştirin ve Oluştur'a tıklayın.

    New Blank App (Xamarin.Forms Portable) configuration in VS 2019

Sonuçta elde edilen çözüm, platforma özgü çeşitli projelerin yanı sıra iki Paylaşılan proje içerir:

  • ILoggingLibrary Dosyasında yer alan ILoggingLibrary.shared.cs proje, bileşenin genel arabirimini (API yüzey alanı) tanımlar. Burası, kitaplığınızın arabirimini tanımladığınız yerdir.
  • Diğer Paylaşılan proje, CrossLoggingLibrary.shared.cs çalışma zamanında soyut arabirimin platforma özgü uygulamasını bulan kodu içerir. Normalde bu dosyayı değiştirmeniz gerekmez.
  • gibi LoggingLibrary.android.csplatforma özgü projeler, her biri kendi ( LoggingLibraryImplementation.cs VS 2017) veya LoggingLibrary.<PLATFORM>.cs (VS 2019) dosyalarında arabirimin yerel bir uygulamasını içerir. Burası, kitaplığınızın kodunu oluşturduğunuz yerdir.

Varsayılan olarak, projenin ILoggingLibrary.shared.cs dosyası ILoggingLibrary bir arabirim tanımı içerir, ancak yöntem içermez. Bu izlenecek yol için aşağıdaki gibi bir Log yöntem ekleyin:

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);
    }
}

Platforma özgü kodunuzu yazma

Arabirimin ve yöntemlerinin ILoggingLibrary platforma özgü bir uygulamasını uygulamak için aşağıdakileri yapın:

  1. Her platform projesinin LoggingLibraryImplementation.cs (VS 2017) veya LoggingLibrary.<PLATFORM>.cs (VS 2019) dosyasını açın ve gerekli kodu ekleyin. Örneğin (platform projesini Android kullanarak):

    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");
            }
        }
    }
    
  2. Desteklemek istediğiniz her platform için projelerde bu uygulamayı yineleyin.

  3. Çalışmanızı denetlemek ve bir sonraki paketlediğiniz yapıtları üretmek için çözüme sağ tıklayın ve Çözüm Derle'yi seçin. Eksik başvurularla ilgili hatalar alırsanız, çözüme sağ tıklayın, bağımlılıkları yüklemek için Paketleri NuGet Geri Yükle'yi seçin ve yeniden derleyin.

Not

Visual Studio 2019 kullanıyorsanız, NuGet Paketlerini Geri Yükle'yi seçip yeniden derlemeye çalışmadan önce sürümünde sürümünü MSBuild.Sdk.Extras olarak 2.0.54LoggingLibrary.csprojdeğiştirmeniz gerekir. Bu dosyaya yalnızca önce projeye sağ tıklayıp (çözümün altında) ve ardından Unload Projectkaldırılan projeye sağ tıklayıp öğesini seçerek Edit LoggingLibrary.csprojerişilebilir.

Not

iOS için derleme yapmak için, Visual Studio için Xamarin.iOS'e giriş bölümünde açıklandığı gibi Visual Studio bağlı bir ağa bağlı Mac'e ihtiyacınız vardır. Mac'iniz yoksa yapılandırma yöneticisindeki iOS projesini temizleyin (yukarıdaki 3. adım).

.nuspec dosyasını oluşturma ve güncelleştirme

  1. Bir komut istemi açın, dosyanın bulunduğu .sln yerin bir düzeyi altındaki klasöre gidin LoggingLibrary ve ilk Package.nuspec dosyayı oluşturmak için NuGet spec komutunu çalıştırın:

    nuget spec
    
  2. Bu dosyayı olarak LoggingLibrary.nuspec yeniden adlandırın ve bir düzenleyicide açın.

  3. dosyayı aşağıdakiyle eşleşecek şekilde güncelleştirin ve YOUR_NAME uygun bir değerle değiştirin. Özellikle değerin <id> nuget.org genelinde benzersiz olması gerekir ( paket oluşturma bölümünde açıklanan adlandırma kurallarına bakın). Ayrıca yazar ve açıklama etiketlerini de güncelleştirmeniz gerektiğini veya paketleme adımı sırasında bir hatayla karşılaşırsınız.

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

İpucu

ile paket sürümünüzü -alpha-beta sonekleyebilirsiniz veya -rc paketinizi yayın öncesi olarak işaretlemek için yayın öncesi sürümler hakkında daha fazla bilgi için Yayın öncesi sürümleri'ne bakın.

Başvuru derlemeleri ekleme

Platforma özgü başvuru derlemelerini eklemek için, öğesinin öğesine LoggingLibrary.nuspec desteklenen platformlarınız için uygun şekilde aşağıdakileri <files> ekleyin:

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

Not

DLL ve XML dosyalarının adlarını kısaltmak için, belirli bir projeye sağ tıklayın, Kitaplık sekmesini seçin ve derleme adlarını değiştirin.

Bağımlılık ekleme

Yerel uygulamalar için belirli bağımlılıklarınız varsa, öğesini öğeleriyle birlikte <group> kullanarak <dependencies> bunları belirtin, örneğin:

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

Örneğin, aşağıdakiler iTextSharp'ı UAP hedefi için bağımlılık olarak ayarlar:

<dependencies>
    <group targetFramework="uap">
        <dependency id="iTextSharp" version="5.5.9" />
    </group>
</dependencies>

Son .nuspec

Son .nuspec dosyanız artık aşağıdaki gibi görünmelidir ve burada da YOUR_NAME uygun bir değerle değiştirilmelidir:

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

Bileşeni paketleme

Tamamlandıktan .nuspec sonra pakete eklemeniz gereken tüm dosyalara başvurmak için komutunu çalıştırmaya pack hazırsınız:

nuget pack LoggingLibrary.nuspec

Bu, oluşturur LoggingLibrary.YOUR_NAME.1.0.0.nupkg. Bu dosyayı NuGet Paket Gezgini gibi bir araçta açıp tüm düğümleri genişleterek aşağıdaki içeriği görürsünüz:

NuGet Package Explorer showing the LoggingLibrary package

İpucu

Dosya .nupkg yalnızca farklı bir uzantıya sahip bir ZIP dosyasıdır. Ayrıca paket içeriğini inceleyebilir ve ardından olarak değiştirebilirsiniz .nupkg.zip, ancak paketi nuget.org'a yüklemeden önce uzantıyı geri yüklemeyi unutmayın.

Paketinizi diğer geliştiricilerin kullanımına açmak için Paket yayımlama yönergelerini izleyin.