Udostępnij za pośrednictwem


Korzystanie z winapp CLI z platformą .NET

Uwaga / Notatka

Ten przewodnik działa w przypadku większości typów .NET project. Kroki zostały przetestowane w projektach konsolowych oraz projektach typu WPF opartych na interfejsie użytkownika.

W tym przewodniku pokazano, jak używać interfejsu wiersza polecenia winapp z aplikacją .NET do debugowania przy użyciu tożsamości pakietu i spakowania aplikacji jako pliku MSIX.

Tożsamość pakietu jest podstawową koncepcją w modelu Windows app. Dzięki niej aplikacja może uzyskiwać dostęp do określonych interfejsów API systemu Windows (takich jak powiadomienia, zabezpieczenia, interfejsy API itp.), mieć czyste środowisko instalacji/odinstalowywania i wiele więcej.

Wymagania wstępne

  1. .NET SDK: Zainstaluj zestaw SDK .NET:

    winget install Microsoft.DotNet.SDK.10 --source winget
    
  2. winapp CLI: zainstaluj winapp narzędzie za pomocą winget:

    winget install Microsoft.winappcli --source winget
    

1. Tworzenie nowej aplikacji .NET

Zacznij od utworzenia prostej aplikacji konsolowej .NET:

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

Uruchom go, aby upewnić się, że wszystko działa:

dotnet run

2. Aktualizowanie kodu w celu sprawdzenia tożsamości

Najpierw zaktualizuj plik project, aby był przeznaczony dla określonej wersji zestawu Windows SDK. Otwórz dotnet-app.csproj plik i zmień element TargetFramework:

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

Teraz zastąp zawartość elementu Program.cs:

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. Uruchamianie bez tożsamości

dotnet run

Powinien zostać wyświetlony komunikat "Nie spakowane".

4. Zainicjuj projekt za pomocą interfejsu wiersza polecenia winapp

Polecenie winapp init automatycznie wykrywa pliki .csproj i uruchamia konfigurację specyficzną dla .NET:

winapp init

Po wyświetleniu monitu:

  • Nazwa pakietu: naciśnij klawisz Enter, aby zaakceptować wartość domyślną
  • Nazwa wydawcy: Naciśnij klawisz Enter, aby zaakceptować wartość domyślną lub wprowadź swoją nazwę
  • Opis: Naciśnij klawisz Enter, aby zaakceptować wartość domyślną lub wprowadzić opis
  • Wersja: Naciśnij klawisz Enter, aby zaakceptować 1.0.0.0
  • Punkt wejścia: Naciśnij klawisz Enter, aby zaakceptować wartość domyślną (dotnet-app.exe)
  • Windows App SDK setup: Wybierz Stable, Preview lub Experimental

To polecenie:

  • Aktualizuje TargetFramework w .csproj do obsługiwanego Windows TFM (jeśli to konieczne)
  • Dodaje odwołania do pakietów NuGet Microsoft.WindowsAppSDK i Microsoft.Windows.SDK.BuildTools
  • Tworzy appxmanifest.xml i Assets folder dla tożsamości aplikacji

Uwaga / Notatka

W przeciwieństwie do projektów natywnych/C++ przepływ .NET nie tworzy pliku winapp.yaml. Pakiety NuGet są zarządzane bezpośrednio za pośrednictwem elementu .csproj. Użyj dotnet restore, aby przywrócić pakiety po sklonowaniu.

5. Debugowanie przy użyciu tożsamości

  1. Skompiluj plik wykonywalny:

    dotnet build -c Debug
    
  2. Zastosuj tożsamość debugowania:

    winapp create-debug-identity .\bin\Debug\net10.0-windows10.0.26100.0\dotnet-app.exe
    
  3. Uruchom plik wykonywalny (nie używaj dotnet run go, ponieważ może zostać ponownie skompilowany):

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

Powinieneś zobaczyć:

Package Family Name: dotnet-app_12345abcde

Automatyzowanie tożsamości debugowania (opcjonalnie)

Dodaj ten element docelowy do pliku .csproj.

<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. Używanie Windows App SDK

Jeśli uruchomiono polecenie winapp init, Microsoft.WindowsAppSDK zostało już dodane jako odwołanie do pakietu NuGet. Zaktualizuj Program.cs, aby korzystać z Windows App Runtime API:

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. Pakiet z plikiem MSIX

  1. Kompilacja do wydania:

    dotnet build -c Release
    
  2. Generowanie certyfikatu programistycznego:

    winapp cert generate --if-exists skip
    
  3. Pakowanie i podpisywanie:

    winapp pack .\bin\Release\net10.0-windows10.0.26100.0 --manifest .\appxmanifest.xml --cert .\devcert.pfx
    
  4. Zainstaluj certyfikat (uruchom jako administrator):

    winapp cert install .\devcert.pfx
    
  5. Zainstaluj , klikając dwukrotnie wygenerowany .msix plik.

Wskazówka

  • Sklep Microsoft Store podpisuje plik MSIX, dlatego nie trzeba się podpisywać przed przesłaniem.
  • Może być konieczne oddzielne pakiety MSIX dla każdej architektury: dotnet build -c Release -r win-x64 lub dotnet build -c Release -r win-arm64.

Automatyzowanie pakowania MSIX (opcjonalnie)

Dodaj ten element docelowy do elementu .csproj:

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