アプリケーションの配置

インストーラ パッケージの作成

アプリケーションをsetup.exeにパッケージ化し、インストーラ パッケージ (.msi) と共に配布 (distribute) することで、ユーザーはそれを一括して配置 (deploy) できるようになります。配置の概念 | MSDN

セットアップ プロジェクトの作成

メニューの【ファイル → 追加 → 新しいプロジェクト】から「新しいプロジェクトの追加」ウィンドウを開きます。そしてプロジェクトの種類から【その他のプロジェクトの種類 → セットアップと配置】を選び「セットアップ プロジェクト」をクリックします。

Visual Studio 2017以降でセットアップ プロジェクト (Setup Project) を作成するには、拡張機能のVisual Studio Installer Projectsをインストールする必要があります。Visual Studio Installer Projects と .NET | Microsoft Learn

セットアップ ウィザードでの作成

セットアップ プロジェクトをウィザードで作成できます。

セットアップ プロジェクトのビルド

ソリューション エクスプローラーでセットアップ プロジェクトのコンテキストメニューを表示し、それの【Add → プロジェクト出力】を選択します。そして[プロジェクト]で対象とするそれを指定し、項目の公開 (Publish Items) を選択し[OK]をクリックします。後はそのプロジェクトをビルドすれば、そのプロジェクトのフォルダにWindows インストーラー パッケージ (.msi) が作成されます。

このときプロジェクトの出力をプライマリ出力 (Primary Output) とすると、ビルドしたときに「WARNING: Including primary output of project '***\***.csproj' with target framework '.NETCoreApp v*.*' may result in incomplete content. See here: https://go.microsoft.com/fwlink/?linkid=2112157」と警告されます。Workflow changes for .NET Core 3.1 and .NET 5 or later - Visual Studio Installer Projects and .NET | Microsoft Learn

構成ファイル

インストーラが不要ならば、ソリューション エクスプローラでプロジェクトのコンテキストメニューを表示し、そこにある[発行]から必要なファイルの一式を作成できます。

ファイル 用途
sample.exe プラットフォーム固有の実行可能ファイル (platform-specific executable) 実行可能ファイルを生成する - アプリケーションの発行 - .NET | Microsoft Learn
sample.dll クロスプラットフォーム バイナリ (cross-platform binary) クロスプラットフォーム バイナリを生成する - アプリケーションの発行 - .NET | Microsoft Learn
sample.runtimeconfig.json .NETランタイムの構成設定 runtimeconfig.json - .NET ランタイム構成オプション - .NET | Microsoft Learn

実行時に.dllがないと、

The application to execute does not exist: 'C:\sample.dll'

のように、.runtimeconfig.jsonがないと

A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in 'C:\Program Files\dotnet\'.
Failed to run as a self-contained app.
  - The application was run as a self-contained app because 'C:\sample.runtimeconfig.json' was not found.
  - If this should be a framework-dependent app, add the 'C:\sample.runtimeconfig.json' file and specify the appropriate framework.

のように出力され、実行に失敗します。

発行方法
発行方法 特徴
フレームワーク依存 (framework-dependent) 必要とするすべてのコンポーネントのインストールをユーザーに委ねる。配布するファイルのサイズが小さい。プラットフォームに依存しない。最新のランタイムが用いられる。フレームワーク依存の発行 - アプリケーションの発行 - .NET | Microsoft Learn
自己完結型 (self-contained) .NETやその他のランタイムなど、必要とするすべてのコンポーネントを格納。 ユーザーによるコンポーネントのインストールが不要。自己完結型の発行 - アプリケーションの発行 - .NET | Microsoft Learn

フレームワーク依存 (framework-dependent)

dotnetコマンドを使用して、.exeをプラットフォーム固有の実行可能ファイルとして、または.dllをクロスプラットフォーム バイナリとして実行できます。Produce a cross-platform binary - Application publishing - .NET | Microsoft Learn

自己完結型 (self-contained)

Visual Studioで自己完結型とするには、発行の[プロファイル設定]で配置モードを[自己完結]とします。サードパーティの依存関係を含まない、自己完結型の展開 - Visual Studio を使用して .NET Core アプリを展開する - .NET | Microsoft Learn

ファイルの公開オプション
項目 作用
単一ファイルの作成 アプリケーションに依存するすべてのファイルを、単一のバイナリにバンドルするようにできる アプリケーション配置用に単一ファイルを作成する - .NET | Microsoft Learn
ReadyToRun コンパイルを有効にする バイナリをReadyToRun (R2R) 形式としてコンパイルすることにより、アプリケーションの起動時間と待機時間を向上させることができる ReadyToRun 展開の概要 - .NET | Microsoft Learn
未使用コードのトリミング ライブラリの未使用部分をアプリケーションから削除することで、展開のサイズを小さくできる 自己完結型アプリケーションのトリミング - .NET | Microsoft Learn

Windowsによる保護

Windows Defender SmartScreen (Windows SmartScreen)

プログラムに署名していないと、それを実行したときに警告されます。たとえばWindows 10では、それは次のような内容です。

Windows によって、コンピューターが保護されました

  • 管理者 … 「Windows SmartScreen は認識されないアプリの起動を停止しました。このアプリを実行すると、PC に問題が起こる可能性があります。
  • 標準ユーザー … 「Windows SmartScreen は認識されないアプリの起動を停止しました。このアプリを実行するには、管理者の承認が必要です。

これに対処する方法は、次のように案内されています。

私はアプリケーションの所有者です。Windows Defender SmartScreen によって自分のプログラムが "ダウンロードしたユーザーの人数が少ない" と判定される可能性を最小限に抑えるには、どうしたらいいでしょうか?

アプリケーション開発者向けに、ダウンロード ファイルの評価に影響し、評価の確立と維持に役立つ業界標準のベスト プラクティスがあります。プラグラムをデジタル署名しないと、バージョンとビルドが変わった場合に評価を自動的に共有できなくなります。

アプリケーションの評価を確立するには、以下の対策を検討します。

  • Authenticode 署名を使ってプログラムにデジタル署名する
    評価は、特定のファイルのほかにデジタル証明書に対しても生成され割り当てられます。デジタル証明書を使うと、多くのプログラムに個別に証明書を付けるのではなく、データを集約してそれを 1 つの証明書に割り当てることができます。評価を確立できるのは、Windows ルート証明書プログラムのメンバーである証明機関 (CA) が発行した Authenticode 証明書だけです。
  • Windows ロゴを申請する
    詳細については、MSDN のWindows ロゴ プログラムページをご覧ください。
Windows Defender SmartScreen® フィルター機能のよくあるご質問

コードサイニング証明書 (Code Signing Certificates)

証明書の取得

Microsoft Learnから検索