.NET ile winapp CLI kullanma

Uyarı

Bu kılavuz çoğu .NET project türü için çalışır. Adımlar hem konsol hem de WPF gibi kullanıcı arabirimi tabanlı projelerle test edilmiştir.

Bu kılavuzda, paket kimliğiyle hata ayıklamak ve uygulamanızı MSIX olarak paketlemek için winapp CLI'nin bir .NET uygulamasıyla nasıl kullanılacağı gösterilmektedir.

Paket kimliği, Windows app modelinde temel bir kavramdır. Uygulamanızın belirli Windows API'lerine (Bildirimler, Güvenlik, Yapay Zeka API'leri vb.) erişmesini sağlar, sorunsuz yükleme ve kaldırma deneyimi sunar ve daha fazlasını gerçekleştirir.

Önkoşullar

  1. .NET SDK: .NET SDK'sını yükleyin:

    winget install Microsoft.DotNet.SDK.10 --source winget
    
  2. winapp CLI: Aracı winget aracılığıyla yükleyin winapp :

    winget install Microsoft.winappcli --source winget
    

1. Yeni bir .NET uygulaması oluşturma

Basit bir .NET konsol uygulaması oluşturarak başlayın:

dotnet new console -n dotnet-app
cd dotnet-app

Her şeyin çalıştığından emin olmak için çalıştırın:

dotnet run

2. Kimliği denetlemek için kodu güncelleştirme

İlk olarak, project dosyanızı belirli bir Windows SDK sürümünü hedef olacak şekilde güncelleştirin. dosyasını açın dotnet-app.csproj ve değiştirin TargetFramework:

<TargetFramework>net10.0-windows10.0.26100.0</TargetFramework>

Şimdi içeriğini Program.csdeğiştirin:

using Windows.ApplicationModel;

try
{
    var package = Package.Current;
    var familyName = package.Id.FamilyName;
    Console.WriteLine($"Package Family Name: {familyName}");
}
catch (InvalidOperationException)
{
    Console.WriteLine("Not packaged");
}

3. Kimlik olmadan çalıştırma

dotnet run

"Paketlenmedi" ifadesini görmeniz gerekir.

4. winapp CLI ile project başlatma

winapp init komutu .csproj dosyalarını otomatik olarak algılar ve .NET özel bir kurulum çalıştırır:

winapp init

Sorulduğunda:

  • Paket adı: Varsayılanı kabul etmek için Enter tuşuna basın
  • Publisher name: Varsayılanı kabul etmek için Enter tuşuna basın veya adınızı girin
  • Açıklama: Varsayılanı kabul etmek veya bir açıklama girmek için Enter tuşuna basın
  • Sürüm: 1.0.0.0'ı kabul etmek için Enter'a basın
  • Giriş noktası: Varsayılanı kabul etmek için Enter tuşuna basın (dotnet-app.exe)
  • Windows App SDK kurulumu: Kararlı, Önizleme veya Deneysel'i seçin

Bu komut:

  • TargetFramework öğesini, gerekirse, .csproj içinde desteklenen bir Windows TFM'sine günceller.
  • Microsoft.WindowsAppSDK ve Microsoft.Windows.SDK.BuildTools NuGet paket referanslarını ekler
  • Uygulama kimliğiniz için appxmanifest.xml ve Assets klasörleri oluşturur.

Uyarı

Yerel/C++ projelerinin aksine .NET akışı bir winapp.yaml dosyası oluşturmaz. NuGet paketleri doğrudan sizin .csprojüzerinden yönetilir. Kopyalamadan sonra paketleri geri yüklemek için kullanın dotnet restore .

5. Kimlikle hata ayıklama

  1. Yürütülebilir dosyayı oluşturun:

    dotnet build -c Debug
    
  2. Hata ayıklama kimliğini uygula:

    winapp create-debug-identity .\bin\Debug\net10.0-windows10.0.26100.0\dotnet-app.exe
    
  3. Yürütülebilir dosyayı çalıştırın (yeniden derleyebileceğinden kullanmayın dotnet run ):

    .\bin\Debug\net10.0-windows10.0.26100.0\dotnet-app.exe
    

Şunu görmeniz gerekir:

Package Family Name: dotnet-app_12345abcde

Hata ayıklama kimliğini otomatikleştirme (isteğe bağlı)

Bu hedefi dosyanıza .csproj ekleyin:

<Target Name="ApplyDebugIdentity" AfterTargets="Build" Condition="'$(Configuration)' == 'Debug'">
    <Exec Command="winapp create-debug-identity &quot;$(TargetDir)$(TargetName).exe&quot;"
          WorkingDirectory="$(ProjectDir)"
          IgnoreExitCode="false" />
</Target>

6. Windows App SDK kullanma

Eğer winapp init komutunu çalıştırdıysanız, Microsoft.WindowsAppSDK zaten bir NuGet paket referansı olarak eklenmişti. Program.cs Windows App Çalışma Zamanı API'sini kullanacak şekilde güncelleştirin:

using Windows.ApplicationModel;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            var package = Package.Current;
            var familyName = package.Id.FamilyName;
            Console.WriteLine($"Package Family Name: {familyName}");

            var runtimeVersion = Microsoft.Windows.ApplicationModel.WindowsAppRuntime.RuntimeInfo.AsString;
            Console.WriteLine($"Windows App Runtime Version: {runtimeVersion}");
        }
        catch (InvalidOperationException)
        {
            Console.WriteLine("Not packaged");
        }
    }
}

7. MSIX ile paketle

  1. Yayın için derleme:

    dotnet build -c Release
    
  2. Geliştirme sertifikası oluşturma:

    winapp cert generate --if-exists skip
    
  3. Paketle ve imzala:

    winapp pack .\bin\Release\net10.0-windows10.0.26100.0 --manifest .\appxmanifest.xml --cert .\devcert.pfx
    
  4. Sertifikayı yükleyin (yönetici olarak çalıştırın):

    winapp cert install .\devcert.pfx
    
  5. Oluşturulan dosyaya çift tıklayarak .msix.

Tavsiye

  • Microsoft Store MSIX'i sizin için imzalar, göndermeden önce imzalamanız gerekmez.
  • Her mimari için ayrı MSIX paketlerine ihtiyacınız olabilir: dotnet build -c Release -r win-x64 veya dotnet build -c Release -r win-arm64.

MSIX paketlemeyi otomatikleştirme (isteğe bağlı)

Bu hedefi .csproj'a ekleyin:

<Target Name="PackageMsix" AfterTargets="Build" Condition="'$(Configuration)' == 'Release'">
    <Exec Command="winapp pack &quot;$(TargetDir.TrimEnd('\'))&quot; --cert &quot;$(ProjectDir)devcert.pfx&quot;"
          WorkingDirectory="$(ProjectDir)"
          IgnoreExitCode="false" />
</Target>