次の方法で共有


.NETでの winapp CLI の使用

このガイドは、ほとんどの.NET projectの種類で機能します。 この手順は、コンソールと UI ベースのプロジェクト (WPF など) の両方でテストされています。

このガイドでは、winapp CLI と.NET アプリケーションを使用してパッケージ ID でデバッグし、アプリケーションを MSIX としてパッケージ化する方法について説明します。

パッケージ ID は、Windows app モデルの主要な概念です。 これにより、アプリケーションで特定の Windows API (通知、セキュリティ、AI API など) をaccessしたり、クリーン インストール/アンインストール エクスペリエンスを使用したりできます。

[前提条件]

  1. .NET SDK: .NET SDK をインストールします。

    winget install Microsoft.DotNet.SDK.10 --source winget
    
  2. winapp CLI: winget を使用して winapp ツールをインストールします。

    winget install Microsoft.winappcli --source winget
    

1. 新しい.NET アプリを作成する

まず、単純な.NETコンソール アプリケーションを作成します。

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

これを実行して、すべてが動作していることを確認します。

dotnet run

2. ID を確認するようにコードを更新する

最初に、特定の Windows SDK バージョンを対象として、project ファイルを更新します。 dotnet-app.csprojを開き、TargetFrameworkを変更します。

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

次に、 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. ID なしで実行する

dotnet run

"パッケージ化されていません" と表示されます。

4. winapp CLI を使用してprojectを初期化する

winapp init コマンドは、.csproj ファイルを自動的に検出し、.NET固有のセットアップを実行します。

winapp init

プロンプトが表示されたら、次を実行します。

  • パッケージ名: Enter キーを押して既定値をそのまま使用します
  • Publisher名: Enter キーを押して既定値をそのまま使用するか、名前を入力します
  • 説明: Enter キーを押して既定値をそのまま使用するか、説明を入力します
  • バージョン: Enter キーを押して 1.0.0.0 を受け入れる
  • エントリ ポイント: Enter キーを押して既定値 (dotnet-app.exe) をそのまま使用します。
  • Windows App SDKセットアップ: [安定]、[プレビュー]、または [試験段階] を選択します

このコマンドは、次の操作を行います。

  • TargetFramework.csprojをサポートされている Windows TFM に更新します (必要な場合)
  • NuGet パッケージ参照の Microsoft.WindowsAppSDKMicrosoft.Windows.SDK.BuildTools を追加します
  • アプリ ID の appxmanifest.xml フォルダーと Assets フォルダーを作成します

ネイティブ/C++ プロジェクトとは異なり、.NET フローは notwinapp.yaml ファイルを作成します。 NuGet パッケージは、 .csprojを介して直接管理されます。 dotnet restoreを使用して、複製後にパッケージを復元します。

5. ID を使用したデバッグ

  1. 実行可能ファイルをビルドします

    dotnet build -c Debug
    
  2. デバッグ ID を適用します

    winapp create-debug-identity .\bin\Debug\net10.0-windows10.0.26100.0\dotnet-app.exe
    
  3. 実行可能ファイルを実行します (再構築する可能性があるため、 dotnet run は使用しないでください)。

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

次のような結果が表示されます。

Package Family Name: dotnet-app_12345abcde

デバッグ ID の自動化 (省略可能)

このターゲットを .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. Windows App SDKの使用

winapp initを実行した場合、Microsoft.WindowsAppSDKは NuGet パッケージ参照として既に追加されています。 Windows App ランタイム API を使用するように Program.cs を更新します。

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 を使用したパッケージ化

  1. リリース用のビルド:

    dotnet build -c Release
    
  2. 開発証明書を生成します

    winapp cert generate --if-exists skip
    
  3. パッケージと署名:

    winapp pack .\bin\Release\net10.0-windows10.0.26100.0 --manifest .\appxmanifest.xml --cert .\devcert.pfx
    
  4. 証明書をインストールします (管理者として実行)。

    winapp cert install .\devcert.pfx
    
  5. 生成された ファイルをダブルクリックして.msixします。

ヒント

  • Microsoft Store は MSIX に署名します。提出前に署名する必要はありません。
  • アーキテクチャごとに個別の MSIX パッケージ ( dotnet build -c Release -r win-x64 または dotnet build -c Release -r win-arm64) が必要になる場合があります。

MSIX パッケージの自動化 (省略可能)

このターゲットを .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>