UWP paketleri oluşturma

Universal Windows Platform (UWP) Windows 10 çalıştıran her cihaz için ortak bir uygulama platformu sağlar. Bu modelde UWP uygulamaları hem tüm cihazlar için ortak olan WinRT API'lerini hem de uygulamanın çalıştığı cihaz ailesine özgü API'leri (Win32 ve .NET dahil) çağırabilir.

Bu kılavuzda, hem Yönetilen hem de Yerel projelerde kullanılabilen yerel bir UWP bileşeni (XAML denetimi dahil) ile bir NuGet paketi oluşturacaksınız.

Önkoşullar

  1. Visual Studio 2017 veya Visual Studio 2015. 2017 Community sürümünü visualstudio.com ücretsiz yükleyin; Professional ve Enterprise sürümlerini de kullanabilirsiniz.

  2. NuGet CLI. nuget.org/downloads'den en son sürümünü nuget.exe indirin ve istediğiniz bir konuma kaydedin (indirme doğrudan)..exe Ardından, henüz yapmadıysanız bu konumu PATH ortam değişkeninize ekleyin.

UWP Windows Runtime bileşeni oluşturma

  1. Visual Studio'da, File > Yeni > Proje'yi seçin, Visual C++ > Windows > Evrensel düğümünü genişletin, Windows Runtime Bileşeni (Evrensel Windows) şablonunu seçin, ismi ImageEnhancer olarak değiştirin ve Tamam'a tıklayın. İstendiğinde Hedef Sürüm ve En Düşük Sürüm için varsayılan değerleri kabul edin.

    Yeni bir UWP Windows Runtime Bileşeni projesi oluşturma

  2. Solution Explorer'da projeye sağ tıklayın, Add > Yeni Öğe' öğesini seçin. Visual C++ > XAML düğümüne tıklayın, Templated Control öğesini seçin, adı AwesomeImageControl.cpp olarak değiştirin ve Add öğesine tıklayın:

    Projeye yeni bir XAML Şablonlu Denetim öğesi ekleme

  3. Solution Explorer'da projeye sağ tıklayın ve Properties. Özellikler sayfasında Configuration Properties C/C++ öğesini genişletin ve Output Files öğesine tıklayın. Sağdaki bölmede XML Belge Dosyaları Oluştur değerini Evet olarak değiştirin:

    XML Belge Dosyaları Oluştur'un Evet olarak ayarlanması

  4. Şimdi çözüme sağ tıklayın, Toplu Derleme'yi seçin, aşağıda gösterildiği gibi iletişim kutusundaki üç Hata Ayıklama kutusunu işaretleyin. Bu, bir derleme yaptığınızda, Windows tarafından desteklenen hedef sistemlerin her biri için tam bir yapıt kümesi oluşturmanızı sağlar.

    Batch Derlemesi

  5. Toplu Derleme iletişim kutusunda Derle'ye tıklayarak projeyi doğrulayın ve NuGet paketi için ihtiyacınız olan çıkış dosyalarını oluşturun.

Uyarı

Bu kılavuzda paket için hata ayıklama bileşenlerini kullanacaksınız. Hata ayıklama olmayan paket için, bunun yerine Toplu Derleme iletişim kutusundaki Yayın (Release) seçeneklerini denetleyin ve ardından gelen adımlarda elde edilen Yayın (Release) klasörlerine bakın.

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

İlk .nuspec dosyayı oluşturmak için aşağıdaki üç adımı uygulayın. Ardından, izleyen bölümler diğer gerekli güncelleştirmelerde size yol gösterir.

  1. Bir komut istemi açın ve öğesini içeren ImageEnhancer.vcxproj klasöre gidin (bu, çözüm dosyasının bulunduğu alt klasör olacaktır).

  2. NuGet spec'yi oluşturacak ImageEnhancer.nuspec komutunu çalıştırın (dosyanın adı .vcxproj dosyasının adından alınır):

    nuget spec
    
  3. ImageEnhancer.nuspec bir düzenleyicide açın ve aşağıdakilerle eşleşmesi için YOUR_NAME'i uygun bir değerle değiştirerek güncelleyin. Ö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>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>
    

Uyarı

Genel tüketim için oluşturulan paketler için, bu etiketler başkalarının paketinizi bulmasına ve ne yaptığını anlamasına yardımcı olduğundan öğeye <tags> özellikle dikkat edin.

Pakete Windows meta verileri ekleme

Windows Runtime Bileşeni, genel kullanıma açık tüm türlerini açıklayan meta veriler gerektirir ve bu da diğer uygulamaların ve kitaplıkların bileşeni kullanmasına olanak tanır. Bu meta veriler, projeyi derlediğinizde oluşturulan ve NuGet paketinize eklenmesi gereken bir .winmd dosyasında bulunur. IntelliSense verilerine sahip bir XML dosyası da aynı anda oluşturulur ve eklenmelidir.

Aşağıdaki <files> düğümünü .nuspec dosyaya ekleyin.

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

XAML içeriği ekleme

Bileşeninize bir XAML denetimi eklemek için, denetim için varsayılan şablona sahip XAML dosyasını eklemeniz gerekir (proje şablonu tarafından oluşturulduğu gibi). Bu, şu bölümde de yer almaktadır <files> :

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

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

    </files>
</package>

Yerel uygulama kitaplıklarını ekleme

Bileşeniniz içinde ImageEnhancer türünün temel mantığı, her hedef çalışma zamanı için oluşturulan çeşitli ImageEnhancer.dll derlemelerde (ARM, x86 ve x64) yer alan yerel kodda yer alır. Bunları pakete eklemek için, ilgili .pri kaynak dosyalarıyla birlikte <files> bölümünde bunlara başvurun:

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

".targets dosyasını ekleme"

Ardından, NuGet paketinizi tüketebilecek C++ ve JavaScript projelerinde gerekli derleme ve winmd dosyalarını tanımlamak için bir .targets dosyası gerekir. (C# ve Visual Basic projeleri bunu otomatik olarak yapar.) Aşağıdaki metni ImageEnhancer.targets içine kopyalayıp .nuspec dosyasıyla aynı klasöre kaydederek bu dosyayı oluşturun. Not: Bu .targets dosyanın paket kimliğiyle (örneğin dosyadaki <Id>.nupspec öğe) aynı ada sahip olması gerekir:

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

Ardından ImageEnhancer.targets öğesine .nuspec dosyanızda başvurun.

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

        <!-- .targets -->
        <file src="ImageEnhancer.targets" target="build\native"/>

    </files>
</package>

Son .nuspec

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

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

Bileşeni paketleme

Tüm gerekli dosyaların .nuspec referansları tamamlandığında, pack komutunu çalıştırmaya hazırsınız.

nuget pack ImageEnhancer.nuspec

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

ImageEnhancer paketini gösteren NuGet Paket Gezgini

Tavsiye

Dosya .nupkg , yalnızca farklı bir uzantıya sahip bir ZIP dosyasıdır. Paket içeriğini de inceleyebilir, ardından .nupkg'yı .zip olarak değiştirebilirsiniz, 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.