Aracılığıyla paylaş


C# Windows Uygulamasında akış sağlayıcısı uygulama

Uyarı

Bazı bilgiler, ticari olarak piyasaya sürülmeden önce önemli ölçüde değiştirilebilen, önceden yayımlanan ürünle ilgilidir. Microsoft, burada sağlanan bilgilerle ilgili olarak açık veya zımni hiçbir garanti vermez.

Bu makalede, bir akış içeriği URI'sini kaydeden ve IFeedProvider arabirimini uygulayan basit bir akış sağlayıcısı oluşturma işleminde size yol gösterilir. Bu arabirimin yöntemleri, genellikle kimlik doğrulama senaryolarını desteklemek üzere özel sorgu dizesi parametreleri istemek için Pencere Öğeleri Panosu tarafından çağrılır. Akış sağlayıcıları tek bir akışı veya birden çok akışı destekleyebilir.

C++/WinRT kullanarak bir akış sağlayıcısı uygulamak için bkz. Win32 uygulamasında (C++/WinRT) akış sağlayıcısı uygulama.

Önkoşullar

  • Cihazınızda geliştirici modu etkinleştirilmiş olmalıdır. Daha fazla bilgi için bkz. Geliştiriciler için ayarlar.
  • WinUI uygulama geliştirme iş yüküyle Visual Studio 2026 veya üzeri.

Yeni bir C# konsol uygulaması oluşturma

Visual Studio'da yeni bir proje oluşturun. Yeni proje oluştur iletişim kutusunda dil filtresini "C#" ve platform filtresini Windows olarak ayarlayın, ardından Konsol Uygulaması proje şablonunu seçin. Yeni projeyi "ExampleFeedProvider" olarak adlandırın. Bu izlenecek yol için Çözümü ve projeyi aynı dizine yerleştir seçeneğinin işaretlenmemiş olduğundan emin olun. İstendiğinde hedef .NET sürümünü 6.0 olarak ayarlayın.

Proje yüklendiğinde, Çözüm Gezgini'nde proje adına sağ tıklayın ve Özelliklerseçin. Genel sayfasında, aşağı kaydırarak Hedef İşletim Sistemi'ne gelin ve "Windows" seçeneğini belirleyin. Hedef İşletim Sistemi Sürümü'nin altında sürüm 10.022631.2787 veya üzerini seçin.

Bu kılavuzda, kolay hata ayıklamayı etkinleştirmek için akış etkinleştirildiğinde konsol penceresini görüntüleyen bir konsol uygulaması kullanıldığına dikkat edin. Akış sağlayıcısı uygulamanızı yayımlamaya hazır olduğunuzda konsol uygulamanızı Windows uygulamasına dönüştürme bölümünde yer alan adımları izleyerek konsol uygulamasını bir Windows uygulamasına dönüştürebilirsiniz.

Windows App SDK NuGet paketine referanslar ekleme

Bu örnek en son kararlı Windows Uygulama SDK'sı NuGet paketini kullanır. Çözüm Gezgini'ndeBağımlılıklar'a sağ tıklayın ve NuGet paketlerini yönet... öğesini seçin. NuGet paket yöneticisinde Gözat sekmesini seçin ve "Microsoft.WindowsAppSDK" araması yapın. Sürüm açılan listesinden en son kararlı sürümü seçin ve ardından Yüklebutonuna tıklayın.

Akış işlemlerini işlemek için Bir FeedProvider sınıfı ekleme

Visual Studio'da, Çözüm Gezgini menüsünden projeye sağ tıklayın veSınıfekle-seçeneğini seçin. Sınıf ekle iletişim kutusunda sınıfı "FeedProvider" olarak adlandırın ve Ekle'ye tıklayın. Oluşturulan FeedProvider.cs dosyasında sınıf tanımını , IFeedProvider arabirimini uyguladığını gösterecek şekilde güncelleştirin.

COM etkinleştirmesi için akış sağlayıcınızı tanımlamak için kullanılacak bir CLSID oluşturun. Araçlar-GUID> Oluştur'a giderek Visual Studio'da BIR GUID oluşturun. Bu GUID'yi daha sonra akış sağlayıcısı uygulamasını paketlerken kullanılacak bir metin dosyasına kaydedin. Aşağıdaki örnekte gösterilen FeedProvider sınıfının ek açıklamalarındaki GUID değerini değiştirin.

// FeedProvider.cs
using Microsoft.Windows.Widgets.Feeds.Providers;
...
[ComVisible(true)]
[ComDefaultInterface(typeof(IFeedProvider))]
[Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]
public sealed class FeedProvider : IFeedProvider

IFeedProvider yöntemlerini uygulama

Sonraki birkaç bölümde IFeedProvider arabiriminin yöntemlerini uygulayacağız.

Uyarı

IFeedProvider arabiriminin geri çağırma yöntemlerine geçirilen nesnelerin yalnızca geri çağırma içinde geçerli olacağı garanti edilir. Geri çağırma bağlamı dışındaki davranışları tanımsız olduğundan, bu nesnelere yönelik başvuruları depolamamalısınız.

Besleme Sağlayıcısı Etkinleştirildi

Sağlayıcıyla ilişkilendirilmiş bir akış Pencere Öğeleri Panosu konağı tarafından oluşturulduğunda OnFeedProviderEnabled yöntemi çağrılır. Bu yöntemin uygulanmasında, gerekli kimlik doğrulama belirteçleri dahil olmak üzere akış içeriğini sağlayan URL'ye geçirilecek parametreleri içeren bir sorgu dizesi oluşturun. Etkinleştirilen akışı ve sorgu dizesini tanımlayan olay args dosyasından FeedProviderDefinitionId değerini geçirerek CustomQueryParametersUpdateOptions örneğini oluşturun. Varsayılan FeedManager'ı alın ve Sorgu dizesi parametrelerini Pencere Öğeleri Panosu'na kaydetmek için SetCustomQueryParameters'ı çağırın.

// FeedProvider.cs

public void OnFeedProviderEnabled(FeedProviderEnabledArgs args)
{
    Console.WriteLine($"{args.FeedProviderDefinitionId} feed provider was enabled.");
    var updateOptions = new CustomQueryParametersUpdateOptions(args.FeedProviderDefinitionId, "param1&param2");
    FeedManager.GetDefault().SetCustomQueryParameters(updateOptions);
}

Besleme Sağlayıcısı Devre Dışı

OnFeedProviderDisabled, sağlayıcının tüm akışları devre dışı bırakıldığında Pencere Öğeleri Panosu tarafından çağrılır. Bu yöntem çağrısına yanıt olarak akış sağlayıcılarının herhangi bir eylem gerçekleştirmesi gerekmez. Yöntem çağırma telemetri amacıyla veya sorgu dizesi parametrelerini güncelleştirmek veya gerekirse kimlik doğrulama belirteçlerini iptal etmek için kullanılabilir. Eğer uygulama yalnızca tek bir akış sağlayıcısını destekliyorsa veya uygulamanın desteklediği tüm akış sağlayıcıları devre dışı bırakıldıysa, bu geri çağırmaya yanıt olarak uygulama çıkabilir.

// FeedProvider.cs
public void OnFeedProviderDisabled(FeedProviderDisabledArgs args)
{
    Console.WriteLine($"{args.FeedProviderDefinitionId} feed provider was disabled.");
}

YayınAçıkken, YayınKapalıyken

Bir akış etkinleştirildiğinde veya devre dışı bırakıldığında, Pencere Öğeleri Panosu tarafından OnFeedEnabled ve OnFeedDisabled çağrılır. Akış sağlayıcılarının bu yöntem çağrılarına yanıt olarak herhangi bir eylem gerçekleştirmesi gerekmez. Yöntem çağırma telemetri amacıyla veya sorgu dizesi parametrelerini güncelleştirmek veya gerekirse kimlik doğrulama belirteçlerini iptal etmek için kullanılabilir.

// FeedProvider.cs
public void OnFeedEnabled(FeedEnabledArgs args)
{
    Console.WriteLine($"{args.FeedDefinitionId} feed was enabled.");
}

// FeedProvider.cs
public void OnFeedDisabled(FeedDisabledArgs args)
{
    Console.WriteLine($"{args.FeedDefinitionId} feed was disabled.");
}

ÖzelSorguParametreleriİstendiğinde

OnCustomQueryParametersRequested, Pencere Öğeleri Panosu, akış sağlayıcısıyla ilişkili özel sorgu parametrelerinin yenilenmesi gerektiğine karar verdiğinde tetiklenir. Örneğin, uzak web hizmetinden akış içeriği getirme işlemi başarısız olursa bu yöntem tetiklenebilir. Bu yönteme geçirilen CustomQueryParametersRequestedArgs'inFeedProviderDefinitionId özelliği, sorgu dizesi parametrelerinin istendiği akışı belirtir. Sağlayıcı sorgu dizesini yeniden oluşturmalı ve SetCustomQueryParameters çağırarak Widgets Panosu'na geri geçirmelidir.

// FeedProvider.cs

public void OnCustomQueryParametersRequested(CustomQueryParametersRequestedArgs args)
{
    Console.WriteLine($"CustomQueryParamaters were requested for {args.FeedProviderDefinitionId}.");
    var updateOptions = new CustomQueryParametersUpdateOptions(args.FeedProviderDefinitionId, "param1&param2");
    FeedManager.GetDefault().SetCustomQueryParameters(updateOptions);
}

İstek üzerine FeedProvider örneği oluşturacak bir sınıf fabrikası uygulama

Akış ana bilgisayarının akış sağlayıcımızla iletişim kurabilmesi için CoRegisterClassObject'i çağırmamız gerekir. Bu işlev, FeedProvider sınıfımız için bir sınıf nesnesi oluşturacak IClassFactory uygulamasını oluşturmamızı gerektirir. Sınıf fabrikamızı bağımsız bir yardımcı sınıfında uygulayacağız.

Visual Studio'da, Çözüm Gezgini menüsünden projeye sağ tıklayın veSınıfekle-seçeneğini seçin. Sınıf ekle iletişim kutusunda sınıfı "FactoryHelper" olarak adlandırın ve Ekledüğmesine tıklayın.

FactoryHelper.cs dosyasının içeriğini aşağıdaki kodla değiştirin. Bu kod , IClassFactory arabirimini tanımlar ve CreateInstance ve LockServer adlı iki yöntemini uygular. Bu kod, bir sınıf fabrikası uygulamak için tipik bir şablon koddur ve oluşturulan sınıf nesnesinin IFeedProvider arabirimini uyguladığını belirtmemiz dışında akış sağlayıcısının işlevselliğine özgü değildir.

// FactoryHelper.cs
using Microsoft.Windows.Widgets.Feeds.Providers;
using System.Runtime.InteropServices;
using WinRT;

namespace ExampleFeedProvider
{
    namespace Com
    {
        static class Guids
        {
            public const string IClassFactory = "00000001-0000-0000-C000-000000000046";
            public const string IUnknown = "00000000-0000-0000-C000-000000000046";
        }

        [ComImport(), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid(Guids.IClassFactory)]
        internal interface IClassFactory
        {
            [PreserveSig]
            int CreateInstance(IntPtr pUnkOuter, ref Guid riid, out IntPtr ppvObject);
            [PreserveSig]
            int LockServer(bool fLock);
        }

        static class ClassObject
        {
            public static void Register(Guid clsid, object pUnk, out uint cookie)
            {
                [DllImport("ole32.dll")]
                static extern int CoRegisterClassObject(
                    [MarshalAs(UnmanagedType.LPStruct)] Guid rclsid,
                    [MarshalAs(UnmanagedType.IUnknown)] object pUnk,
                    uint dwClsContext,
                    uint flags,
                    out uint lpdwRegister);

                int result = CoRegisterClassObject(clsid, pUnk, 0x4, 0x1, out cookie);
                if (result != 0)
                {
                    Marshal.ThrowExceptionForHR(result);
                }
            }

            public static int Revoke(uint cookie)
            {
                [DllImport("ole32.dll")]
                static extern int CoRevokeClassObject(uint dwRegister);

                return CoRevokeClassObject(cookie);
            }
        }
    }

    internal class FeedProviderFactory<T> : Com.IClassFactory
            where T : IFeedProvider, new()
    {
        public int CreateInstance(IntPtr pUnkOuter, ref Guid riid, out IntPtr ppvObject)
        {
            ppvObject = IntPtr.Zero;

            if (pUnkOuter != IntPtr.Zero)
            {
                Marshal.ThrowExceptionForHR(CLASS_E_NOAGGREGATION);
            }

            if (riid == typeof(T).GUID || riid == Guid.Parse(Com.Guids.IUnknown))
            {
                // Create the instance of the .NET object
                ppvObject = MarshalInspectable<IFeedProvider>.FromManaged(new T());
            }
            else
            {
                // The object that ppvObject points to does not support the
                // interface identified by riid.
                Marshal.ThrowExceptionForHR(E_NOINTERFACE);
            }

            return 0;
        }

        int Com.IClassFactory.LockServer(bool fLock)
        {
            return 0;
        }

        private const int CLASS_E_NOAGGREGATION = -2147221232;
        private const int E_NOINTERFACE = -2147467262;
    }
}

Ole ile akış sağlayıcısı sınıf nesnesini kaydetme

Yürütülebilir dosyamızın Program.cs dosyasında, Akış sağlayıcımızı OLE'ye kaydetmek için CoRegisterClassObject'i çağıracağız, böylece Pencere Öğeleri Panosu onunla etkileşim kurabilir. Program.cs içeriğini aşağıdaki kodla değiştirin. Bu, Önceki bir adımda tanımladığımız FeedProviderFactory arabirimini kullanarak FeedProvider yardımcı sınıfını kaydeder. Hata ayıklama amacıyla bu örnek, etkin akış sağlayıcılarını temsil eden FeedProviderInfo nesnelerinin listesini almak için varsayılan FeedManager örneğindeki GetEnabledFeedProviders'ı çağırır. Etkinleştirilen tüm akış kimliklerini listelemek için EnabledFeedDefinitionIds özelliğini kullanarak etkin akış sağlayıcıları arasında döngü oluşturur.

// Program.cs

using Microsoft.Windows.Widgets.Feeds.Providers;
using Microsoft.Windows.Widgets.Providers;
using System; 
using System.Runtime.InteropServices;

namespace ExampleFeedProvider
{

    public static class Program
    {
        [DllImport("kernel32.dll")]
        static extern IntPtr GetConsoleWindow();

        [MTAThread]
        static void Main(string[] args)
        {
            Console.WriteLine("FeedProvider Starting...");
            if (args.Length > 0 && args[0] == "-RegisterProcessAsComServer")
            {
                WinRT.ComWrappersSupport.InitializeComWrappers();

                uint registrationHandle;
                var factory = new FeedProviderFactory<FeedProvider>();
                Com.ClassObject.Register(typeof(FeedProvider).GUID, factory, out registrationHandle);

                Console.WriteLine("Feed Provider registered.");

                var existingFeedProviders = FeedManager.GetDefault().GetEnabledFeedProviders();
                if (existingFeedProviders != null)
                {
                    Console.WriteLine($"There are {existingFeedProviders.Length} FeedProviders currently outstanding:");
                    foreach (var feedProvider in existingFeedProviders)
                    {
                        Console.WriteLine($"  ProviderId: {feedProvider.FeedProviderDefinitionId}, DefinitionIds: ");
                        var m = WidgetManager.GetDefault().GetWidgetIds();
                        if (feedProvider.EnabledFeedDefinitionIds != null)
                        {
                            foreach (var enabledFeedId in feedProvider.EnabledFeedDefinitionIds)
                            {
                                Console.WriteLine($" {enabledFeedId} ");
                            }
                        }
                    }
                }
                if (GetConsoleWindow() != IntPtr.Zero)
                {
                    Console.WriteLine("Press ENTER to exit.");
                    Console.ReadLine();
                }
                else
                {
                    while (true)
                    {
                        // You should fire an event when all the outstanding
                        // FeedProviders have been disabled and exit the app.
                    }
                }
            }
            else
            {
                Console.WriteLine("Not being launched to service Feed Provider... exiting.");
            }
        }
    }
}

Bu kod örneğinin, uygulamanın konsol uygulaması olarak çalışıp çalışmadığını belirlemek için GetConsoleWindow işlevini kullandığını ve bunun bu kılavuzun varsayılan davranışı olduğunu unutmayın. İşlev geçerli bir işaretçi döndürürse, konsola hata ayıklama bilgileri yazarız. Aksi takdirde, uygulama bir Windows uygulaması olarak çalışır. Bu durumda, etkin akış sağlayıcılarının listesi boş olduğunda ve uygulamadan çıktığımızda OnFeedProviderDisabled yönteminde ayarladığımız olayı bekleriz. Örnek konsol uygulamasını Windows uygulamasına dönüştürme hakkında bilgi için bkz. Konsol uygulamanızı Windows uygulamasına dönüştürme.

Akış sağlayıcısı uygulamanızı paketleme

Geçerli sürümde yalnızca paketlenmiş uygulamalar akış sağlayıcısı olarak kaydedilebilir. Aşağıdaki adımlar, uygulamanızı paketleme ve uygulamanızı işletim sistemi sağlayıcısı olarak kaydetmek için uygulama bildirimini güncelleştirme işleminde size yol gösterir.

MSIX paketleme projesi oluşturma

Çözüm Gezgini, çözümünüze sağ tıklayın ve Yeni Proje Ekle...>seçin. Yeni Proje Ekle iletişim kutusunda "Windows Uygulama Paketleme Projesi" şablonunu seçin ve İleri'yetıklayın. Proje adını "ExampleFeedProviderPackage" olarak ayarlayın ve Oluştur'a tıklayın. İstendiğinde hedef sürümü 22621 veya sonraki bir sürüme ayarlayın ve Tamam'a tıklayın. Ardından ExampleFeedProviderPackage projesine sağ tıklayın ve Proje Başvurusu Ekle'yi> seçin. ExampleFeedProvider projesini seçin ve Tamam'a tıklayın.

Paketleme projesine Windows Uygulama SDK paket referansı ekleyin

MSIX paketleme projesine Windows Uygulama SDK'sı nuget paketine bir başvuru eklemeniz gerekir. Çözüm Gezgini'nde ExampleFeedProviderPackage projesine çift tıklayarak ExampleFeedProviderPackage.wapproj dosyasını açın. Project öğesinin içine aşağıdaki xml dosyasını ekleyin.

<!--ExampleWidgetProviderPackage.wapproj-->
<ItemGroup>
    <PackageReference Include="Microsoft.WindowsAppSDK" Version="1.5.231116003-experimentalpr">
        <IncludeAssets>build</IncludeAssets>
    </PackageReference>  
</ItemGroup>

Uyarı

PackageReference öğesinde belirtilen Sürüm'in önceki adımda bahsedilen en son kararlı sürümle eşleştiğinden emin olun.

Windows Uygulama SDK'sının doğru sürümü bilgisayarda zaten yüklüyse ve SDK çalışma zamanını paketinizde paketlemek istemiyorsanız, ExampleFeedProviderPackage projesi için Package.appxmanifest dosyasında paket bağımlılığını belirtebilirsiniz.

<!--Package.appxmanifest-->
...
<Dependencies>
...
    <PackageDependency Name="Microsoft.WindowsAppRuntime.1.5.233430000-experimental1" MinVersion="2000.638.7.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" />
...
</Dependencies>
...

Paket bildirimini güncelleştirme

Çözüm Gezgini'nde dosyaya Package.appxmanifest sağ tıklayın ve Kodu Görüntüle'yi seçerek bildirim xml dosyasını açın. Ardından, kullanacağımız uygulama paketi uzantıları için bazı ad alanı bildirimleri eklemeniz gerekir. Üst düzey Package öğesine aşağıdaki ad alanı tanımlarını ekleyin.

<!-- Package.appmanifest -->
<Package
  ...
  xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
  xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"

Application öğesinin içinde Extensions adlı yeni bir boş öğe oluşturun. Bunun uap:VisualElementskapanış etiketinden sonra geldiğinden emin olun.

<!-- Package.appxmanifest -->
<Application>
...
    <Extensions>

    </Extensions>
</Application>

Eklememiz gereken ilk uzantı ComServer uzantısıdır. Bu işlem yürütülebilir dosyanın giriş noktasını işletim sistemine kaydeder. Bu uzantı, bir kayıt defteri anahtarı ayarlayarak COM sunucusunu kaydetmenin paketlenmiş uygulama eşdeğeridir ve pencere öğesi sağlayıcılarına özgü değildir. Aşağıdaki com:Extension öğesini Extensions öğesinin alt öğesi olarak ekleyin. com:Class öğesinin Id özniteliğindeki GUID değerini, FeedProvider sınıfını tanımlarken önceki adımda oluşturduğunuz GUID ile değiştirin.

<!-- Package.appxmanifest -->
<Extensions>
    <com:Extension Category="windows.comServer">
        <com:ComServer>
            <com:ExeServer Executable="ExampleFeedProvider\ExampleFeedProvider.exe" Arguments="-RegisterProcessAsComServer" DisplayName="C# Feed Provider App">
                <com:Class Id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" DisplayName="FeedProvider" />
            </com:ExeServer>
        </com:ComServer>
    </com:Extension>
</Extensions>


Ardından, uygulamayı akış sağlayıcısı olarak kaydeden uzantıyı ekleyin. uap3:Extension öğesini aşağıdaki kod parçacığına Extensions öğesinin alt öğesi olarak yapıştırın. COM öğesinin ClassId özniteliğini önceki adımlarda kullandığınız GUID ile değiştirdiğinizden emin olun.

<!-- Package.appxmanifest -->
<Extensions>
    ...
    <uap3:Extension Category="windows.appExtension">
        <uap3:AppExtension Name="com.microsoft.windows.widgets.feeds" DisplayName="ContosoFeed" Id="com.examplewidgets.examplefeed" PublicFolder="Public">
            <uap3:Properties>
                <FeedProvider Icon="ms-appx:Assets\StoreLogo.png" Description="FeedDescription">
                    <Activation>
                        <!-- Apps exports COM interface which implements IFeedProvider -->
                        <CreateInstance ClassId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" />
                    </Activation>
                    <Definitions>
                        <Definition Id="Contoso_Feed"
                            DisplayName="Contoso_Feed Feed"
                            Description="Feed representing Contoso"
                            ContentUri="https://www.contoso.com/"
                            Icon="ms-appx:Images\StoreLogo.png">
                        </Definition>
                        <Definition Id="Fabrikam_Feed"
                            DisplayName="Fabrikam Feed"
                            Description="Feed representing Example"
                            ContentUri="https://www.fabrikam.com/"
                            Icon="ms-appx:Images\StoreLogo.png">
                        </Definition>
                    </Definitions>
                </FeedProvider>
            </uap3:Properties>
        </uap3:AppExtension>
    </uap3:Extension>
</Extensions>

Bu öğelerin tümüne ilişkin ayrıntılı açıklamalar ve biçim bilgileri için bkz . Akış sağlayıcısı paketi bildirim XML biçimi.

Akış sağlayıcınızı test etme

Geliştirme makinenizle uyumlu olan mimariyi, örneğin "x64", Çözüm Platformları açılır listesinden seçtiğinizden emin olun. Çözüm Gezgini'nde çözüme sağ tıklayın ve Çözümü Oluşturseçin. Bu işlem tamamlandıktan sonra ExampleWidgetProviderPackage üzerine sağ tıklayın ve Dağıtseçeneğini seçin. Konsol uygulamasının dağıtımda başlatılması gerekir ve konsol çıkışında akışların etkinleştirildiğini görürsünüz. Pencere Öğeleri Panosu'nı açtığınızda yeni akışları akışlar bölümünün üst kısmındaki sekmelerde görmeniz gerekir.

Akış sağlayıcınızda hata ayıklama

Akışlarınızı sabitledikten sonra Pencere Öğesi Platformu, akışla ilgili bilgileri almak ve göndermek için akış sağlayıcısı uygulamanızı başlatır. Çalışan akışta hata ayıklamak için çalışan akış sağlayıcısı uygulamasına bir hata ayıklayıcısı ekleyebilir veya başladıktan sonra Visual Studio'yu akış sağlayıcısı işleminde hata ayıklamayı otomatik olarak başlatacak şekilde ayarlayabilirsiniz.

Çalışan işleme eklemek için:

  1. Visual Studio'da Hata Ayıklama ->işleme ekle'ye tıklayın.
  2. İşlemleri filtreleyin ve istediğiniz akış sağlayıcısı uygulamasını bulun.
  3. Hata ayıklayıcısını ekleyin.

Hata ayıklayıcıyı başlangıçta başlatıldığında işleme otomatik olarak eklemek için:

  1. Visual Studio'da Hata Ayıkla -> Diğer Hata Ayıklama Hedefleri -> Yüklü Uygulama Paketinde Hata Ayıklama'ya tıklayın.
  2. Paketleri filtreleyin ve istediğiniz akış sağlayıcısı paketini bulun.
  3. Bunu seçin ve "Başlatmayın, ancak başlatıldığında kodumu hata ayıklayın" diyen kutuyu işaretleyin.
  4. Ekle'e tıklayın.

Konsol uygulamanızı Windows uygulamasına dönüştürme

Bu kılavuzda oluşturulan konsol uygulamasını bir Windows uygulamasına dönüştürmek için Çözüm Gezgini'ndeExampleFeedProvider projesine sağ tıklayın ve Özellikler'i seçin. Uygulama->Genel altında Çıkış türünü "Konsol Uygulaması"ndan "Windows Uygulaması"na yapın.

Çıkış türü Windows Uygulaması olarak ayarlanmış C# akışı sağlayıcısı proje özelliklerini gösteren ekran görüntüsü

Akış sağlayıcısı uygulamanızı yayımlama

Akış sağlayıcınızı geliştirip test ettikten sonra, kullanıcıların cihazlarına akışlarınızı yükleyebilmesi için uygulamanızı Microsoft Store'da yayımlayabilirsiniz. Uygulama yayımlamaya yönelik adım adım yönergeler için bkz. Uygulamanızı Microsoft Store'da yayımlama.

Besleme Mağazası Koleksiyonu

Uygulamanız Microsoft Store'da yayımlandıktan sonra, uygulamanızın kullanıcıların Windows akışlarını içeren uygulamaları bulmasına yardımcı olan akışlar Mağaza Koleksiyonu'na eklenmesini isteyebilirsiniz. İsteğinizi göndermek için bkz. Mağaza Koleksiyonu'na eklemek üzere Akışınızı/Panonuzu gönderme.