次の方法で共有


RID 固有、自己完結型、および AOT .NET ツールを作成する

この記事の対象: ✔️ .NET SDK 10 以降のバージョン

ネイティブ、高速、トリミングされたアプリケーションを配布できるように、特定のプラットフォームとアーキテクチャ用の .NET ツールをパッケージ化します。 この機能により、MCP サーバーやその他のプラットフォーム固有のユーティリティなどのコマンド ライン ツール用に、ネイティブで高速でトリミングされた .NET アプリケーションを簡単に配布できます。

概要

.NET SDK 10 以降では、特定のランタイム識別子 (RID) を対象とする .NET ツールを作成できます。 次のツールを使用できます。

  • RID 固有: 特定のオペレーティング システムとアーキテクチャ用にコンパイルされます。
  • 自己完結型: .NET ランタイムを含めます。個別の .NET インストールは必要ありません。
  • ネイティブ AOT: 事前コンパイルを使用して、起動時間を短縮し、メモリ占有領域を小さくします。

ユーザーが RID 固有のツールをインストールすると、.NET CLI によってプラットフォームに適したパッケージが自動的に選択されてインストールされます。

RID 固有のパッケージ化にオプトインする

RID 固有のツールを作成するには、次のいずれかの MSBuild プロパティを使用してプロジェクトを構成します。

RuntimeIdentifiers プロパティ

RuntimeIdentifiersを使用して、ツールでサポートされるプラットフォームを指定します。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <PackAsTool>true</PackAsTool>
    <ToolCommandName>mytool</ToolCommandName>
    <RuntimeIdentifiers>win-x64;linux-x64;osx-arm64</RuntimeIdentifiers>
  </PropertyGroup>
</Project>

ToolPackageRuntimeIdentifiers プロパティ

または、ツール固有の RID 構成に ToolPackageRuntimeIdentifiers を使用します。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <PackAsTool>true</PackAsTool>
    <ToolCommandName>mytool</ToolCommandName>
    <ToolPackageRuntimeIdentifiers>win-x64;linux-x64;osx-arm64</ToolPackageRuntimeIdentifiers>
  </PropertyGroup>
</Project>

RID 値のセミコロン区切りのリストを使用します。 ランタイム識別子の一覧については、 RID カタログを参照してください。

ツールをパッケージ化する

パッケージ化プロセスは、AOT コンパイルを使用しているかどうかによって異なります。 プロジェクトから NuGet パッケージまたは .nupkg ファイルをビルドするには、 dotnet pack コマンドを実行します。

RID に特有の自己完結型ツール

AOT コンパイルのないツールの場合は、 dotnet pack を 1 回実行します。

dotnet pack

このコマンドは、複数の NuGet パッケージを作成します。

  • RID ごとに 1 つのパッケージ: <packageName>.<RID>.<packageVersion>.nupkg
    • 例: mytool.win-x64.1.0.0.nupkg
    • 例: mytool.linux-x64.1.0.0.nupkg
    • 例: mytool.osx-arm64.1.0.0.nupkg
  • 1 つの RID に依存しないポインター パッケージ: <packageName>.<packageVersion>.nupkg
    • 例: mytool.1.0.0.nupkg

AOT ツール

AOT コンパイル (<PublishAot>true</PublishAot>) を使用するツールの場合は、プラットフォームごとに個別にパックする必要があります。

  • 最上位レベルのパッケージを 1 回 (任意のプラットフォームで) パックします。

    dotnet pack
    
  • 対応するプラットフォーム上の特定の RID ごとにパックします。

    dotnet pack -r win-x64
    dotnet pack -r linux-x64
    dotnet pack -r osx-arm64
    

    AOT コンパイルではネイティブ バイナリが生成されるため、対応するプラットフォームで各 RID 固有のパック コマンドを実行する必要があります。 ネイティブ AOT コンパイルの前提条件の詳細については、「 ネイティブ AOT のデプロイ」を参照してください。

パッケージ構造

パッケージの種類

RID 固有のツール パッケージでは、次の 2 種類のパッケージが使用されます。

  • DotnetTool: メタデータを含む最上位レベルのパッケージ。
  • DotnetToolRidPackage: 実際のツール バイナリを含む RID 固有のパッケージ。

パッケージ メタデータ

最上位のパッケージには、RID 固有のツールであることを示すメタデータが含まれており、RID 固有のパッケージが一覧表示されます。 dotnet tool installを実行すると、CLI はこのメタデータを読み取り、現在のプラットフォーム用にインストールする RID 固有のパッケージを決定します。

ツールを公開する

dotnet nuget プッシュを使用して、すべてのパッケージを NuGet.org またはパッケージ フィードに発行します。

dotnet nuget push path/to/package/root/*.nupkg

RID 固有のツールを実行する

ユーザーは、プラットフォームに依存しないツールと同じ方法で RID 固有のツールを実行します。

dnx mytool

CLI は自動的に次の手順を実行します。

  1. 最上位レベルのパッケージをダウンロードします。
  2. RID 固有のメタデータを読み取ります。
  3. 現在のプラットフォームに最適なパッケージを識別します。
  4. RID 固有のパッケージをダウンロードして実行します。

例: AOT ツールを作成する

AOT コンパイル RID 固有のツールを作成する完全な例を次に示します。

  1. 新しいコンソール アプリケーションを作成します。

    dotnet new console -n MyFastTool
    cd MyFastTool
    
  2. プロジェクト ファイルを更新して、AOT および RID 固有のパッケージ化を有効にします。

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net10.0</TargetFramework>
        <PackAsTool>true</PackAsTool>
        <ToolCommandName>myfasttool</ToolCommandName>
        <RuntimeIdentifiers>win-x64;linux-x64;osx-arm64</RuntimeIdentifiers>
        <PublishAot>true</PublishAot>
        <PackageId>MyFastTool</PackageId>
        <Version>1.0.0</Version>
        <Authors>Your Name</Authors>
        <Description>A fast AOT-compiled tool</Description>
      </PropertyGroup>
    </Project>
    
  3. Program.csにアプリケーション コードを追加します。

    Console.WriteLine("Hello from MyFastTool!");
    Console.WriteLine($"Running on {Environment.OSVersion}");
    
  4. 最上位レベルのパッケージをパックします。

    dotnet pack
    
  5. (対応するプラットフォーム上の) 特定の RID ごとにパックします。

    Windows の場合:

    dotnet pack -r win-x64
    

    Linux の場合:

    dotnet pack -r linux-x64
    

    macOS の場合:

    dotnet pack -r osx-arm64
    
  6. dotnet nuget push コマンドを使用して、すべてのパッケージを NuGet.org に発行します。

こちらも参照ください