.NET ClickOnce アプリケーションをコマンド ラインからビルドする

Visual Studio では、統合開発環境 (IDE) で作成されたプロジェクトであってもコマンド ラインからビルドできます。 実際、.NET 5 以降のみがインストールされている別のコンピューターで Visual Studio を使用して作成されたプロジェクトをリビルドできます。 この機能を使用すると、たとえば中央のビルド ラボで自動化されたプロセスを使用して、または、プロジェクト自体をビルドする範囲を超えた高度なスクリプト手法を使用して、ビルドを再現できます。

Note

コマンド ラインから .NET Framework ClickOnce アプリケーションをビルドするには、「ClickOnce アプリケーションのコマンド ラインからのビルド」をご覧ください。

MSBuild を使用して .NET ClickOnce アプリケーションの展開を再現する

コマンド ラインで msbuild /target:publish を呼び出すと、MSBuild システムに対して、プロジェクトをビルドし、発行フォルダー内に ClickOnce アプリケーションを作成するよう指示されます。 このコマンドは、IDE で [発行] コマンドを選択することと同等です。

このコマンドでは、msbuild.exe が実行されます。これは、Visual Studio のコマンドプロンプト環境のパスにあります。

"ターゲット" は、コマンドをどのように処理するかについての、MSBuild に対するインジケーターです。 主要なターゲットは、"ビルド" ターゲットと "発行" ターゲットです。 ビルド ターゲットは、IDE でビルド コマンドを選択する (または F5 キーを押す) ことに相当します。 プロジェクトをビルドするだけの場合は、「msbuild」と入力します。 このコマンドが機能するのは、ビルド ターゲットが、Visual Studio によって生成されるすべてのプロジェクトの既定のターゲットであるためです。 そのため、ビルド ターゲットを明示的に指定する必要はありません。 したがって、「msbuild」と入力するのは、「msbuild /target:build」を入力するのと同じ操作になります。

/target:publish コマンドでは、MSBuild に、発行ターゲットを呼び出すように指示します。 発行先はビルド ターゲットに依存します。これは、発行操作がビルド操作のスーパーセットであることを意味します。 たとえば、Visual Basic または C# のソース ファイルを変更した場合、発行の操作によって対応するアセンブリが自動的にリビルドされます。

Mage.exe コマンド ライン ツールを使うことで、ClickOnce マニフェストを作成する完全な ClickOnce の配置を生成する方法については、「チュートリアル: ClickOnce アプリケーションを手動で配置する」を参照してください。

MSBuild で基本的な ClickOnce アプリケーションを作成してビルドする

発行プロファイルを作成する最も簡単な方法は、Visual Studio を使用することです。 MSBuild を使って発行するには、発行プロファイルが必要です。

ClickOnce プロジェクトを作成して発行する

  1. Visual Studio を起動し、新しいプロジェクトを作成します。

    Windows フォーム アプリまたは WPF アプリケーション プロジェクト テンプレートを選び、プロジェクトに CmdLineDemo という名前を指定してから、プロジェクトを作成します。

  2. ソリューション エクスプローラーでプロジェクトを右クリックし、[発行] を選択します。

    この手順により、ClickOnce アプリケーションの配置を生成するようにプロジェクトが適切に構成されます。

    [発行] ページが表示されます。

  3. [発行] ページで、[発行プロファイルの追加][ClickOnce][完了] の順に選択します。

    この演習では、[発行] ページの他の構成設定は無視することができます。

  4. プロセスが完了したら。[閉じる] を選択して [発行] ページ ダイアログを終了します。

  5. 公開を選択します。

    Visual Studio によって ClickOnce 展開出力が生成されます。

  6. プロジェクトを保存し、それが格納されるフォルダーの場所をメモします。

    上記の手順では、初めて発行された ClickOnce プロジェクトが作成されます。 これで、IDE の外部でビルドを再現することができます。

コマンド ラインからビルドを再現する

  1. Visual Studio を終了します。

  2. Windows の [スタート] メニューから、[ツール]>[コマンド ライン]>[開発者コマンド プロンプト] の順に選びます。

    Visual Studio の開発者コマンド プロンプトが開きます。

  3. [Visual Studio コマンド プロンプト] で、現在のディレクトリとして前にビルドしたプロジェクトの場所が示されることを確認します。

    プロジェクト ディレクトリで作業していない場合は、chdir C:\Users\username\source\repos\CmdLineDemo のようなコマンドを入力して、目的の場所に変更します。

  4. 前のセクションで作成した既存のファイルを削除するには、「rmdir /s publish」と入力します。

    この手順は省略できますが、このようにすると、コマンド ラインのビルドによってすべての新しいファイルが確実に生成されます。

    .NET 5 以降では、コマンド ラインから .NET ClickOnce アプリケーションをビルドする場合も同様のエクスペリエンスです。 1 つの違いは、MSBuild コマンド ラインで、発行プロファイルの追加プロパティを指定する必要があることです。

  5. msbuild /target:publish /p:PublishProfile=<pubxml file> /p:PublishDir="<specific location>"」と入力します。

    以上の手順で、プロジェクトの publish という名前のサブフォルダーに、完全な ClickOnce アプリケーション デプロイが生成されます。 CmdLineDemo.application は ClickOnce 配置マニフェストです。 CmdLineDemo_1.0.0.0 フォルダーには、ファイル CmdLineDemo.exeCmdLineDemo.exe.manifest (ClickOnce アプリケーション マニフェスト) が含まれています。 Setup.exe はブートストラップであり、既定では .NET をインストールするように構成されています。 このフォルダーのファイルは、Web 経由で、または UNC や CD/DVD を使用してアプリケーションをデプロイするために必要となる完全なファイル セットで構成されます。

Note

MSBuild システムでは、PublishDir オプションを使い、msbuild /t:publish /p:PublishProfile=<pubxml file> /p:PublishDir="<specific location>" などのように出力の場所を指定します。

発行プロセスの出力

MSBuild では、PublishDir プロパティを使って、ビルド成果物などのビルド出力の場所を設定します。 MSBuild で発行先として使用される PublishDir 値は、既定では、.pubxml ファイルの PublishDir プロパティから取得されます (.NET)。 この動作は、/p スイッチを使用して MSBuild コマンド ラインでオーバーライドすることもできます。 設定をオーバーライドすると、指定した場所に発行出力が書き込まれます。 出力は、発行の MSBuild ステップの間に生成されます。 AfterTargets="ClickOncePublish" を含むすべての MSBuild ターゲットは、このコピーが作成された後で実行されます。

PublishUrl プロパティは、PublishDir とは異なり、MSBuild ステップでは使われません。 MSBuild を直接呼び出してコマンド ラインから発行する場合、PublishUrl は無視されます。

Visual Studio IDE で発行を開始すると、Visual Studio によって MSBuild が呼び出され、成果物は PublishDir の場所に発行されます。 この MSBuild ステップが完了すると、Visual Studio により ClickOnce 固有のファイルが PublishUrl で指定されている場所に発行されます。 この 2 番目のステップは、Visual Studio プロセス内で実行されます。 これは Visual Studio のプロセスであるため、このステップ中に実行するターゲットやタスクを挿入することはできません。

Visual Studio を使わない MSBuild の展開では、展開ディレクトリ内のすべてのファイルが展開先またはメディアにコピーされます。 配置ディレクトリには、Web サイトや FTP サイトのフォルダー、ファイル共有、または CD-ROM を指定できます。 たとえば、サード パーティのツールやカスタム MSBuild タスクを使って、ClickOnce ファイルをコピーできます。

PublishUrl フォルダーで後処理を行うには、別のスクリプトを使う必要があります。

重要

PublishDirPublishUrl と同じ場所に設定されている場合、コンパイル出力が重複して PublishUrl の場所にコピーされます。 Visual Studio 2022 バージョン 17.4 以降では、新しいプロファイルを作成することでこの問題を回避できます。 新しいプロファイルでは、PublishDirPublishUrl とは異なる場所に設定されます。 発行の操作の最後に、関連する ClickOnce ファイルが PublishDir から PublishUrl の場所にコピーされます。

[発行] プロパティ

前述の手順を使用してアプリケーションを発行すると、.NET プロジェクト (.NET 5 以降) 用の発行プロファイル ファイルに、以下のプロパティが挿入されます。 これらのプロパティは、ClickOnce アプリケーションがどのように生成されるかに直接影響を及ぼします。

.pubxml:

<AssemblyOriginatorKeyFile>WindowsApplication3.snk</AssemblyOriginatorKeyFile>
<GenerateManifests>true</GenerateManifests>
<TargetZone>LocalIntranet</TargetZone>
<PublisherName>Microsoft</PublisherName>
<ProductName>CmdLineDemo</ProductName>
<PublishUrl>http://localhost/CmdLineDemo</PublishUrl>
<Install>true</Install>
<ApplicationVersion>1.0.0.*</ApplicationVersion>
<ApplicationRevision>1</ApplicationRevision>
<UpdateEnabled>true</UpdateEnabled>
<UpdateRequired>false</UpdateRequired>
<UpdateMode>Foreground</UpdateMode>
<UpdateUrlEnabled>false</UpdateUrlEnabled>
<IsWebBootstrapper>true</IsWebBootstrapper>
<BootstrapperEnabled>true</BootstrapperEnabled>

これらのプロパティは、プロジェクト ファイル自体を変更することなく、コマンド ラインでオーバーライドできます。 たとえば、次のコードでは、ブートストラップを使用せずに ClickOnce アプリケーション デプロイがビルドされます。

msbuild /target:publish /p:PublishProfile=<pubxml file> /property:BootstrapperEnabled=false

発行プロパティは Visual Studio で、プロジェクト デザイナー[発行][セキュリティ][署名] の各プロパティ ページから制御されます。 .NET プロジェクト (.NET 5 以降) の場合、これらの設定は pubxml ファイルで提供されます。このファイルには、発行ツールを使用して Visual Studio 内でアクセスできます。

以下の発行プロパティは、アプリケーション デザイナーのさまざまなプロパティ ページで設定されます。

  • AssemblyOriginatorKeyFile を使って、ClickOnce アプリケーション マニフェストへの署名に使うキー ファイルを指定します。 この同じキーを、アセンブリに厳密な名前を割り当てるために使用することもできます。 このプロパティは、プロジェクト デザイナー[署名] ページで設定されます。 .NET Windows アプリケーションの場合、この設定はプロジェクト ファイルに残されています。

以下のプロパティは、[発行] ページで設定されます。

  • PublishUrl は、IDE 内でアプリケーションの発行先となる場所です。 InstallUrl プロパティと UpdateUrl プロパティの両方が指定されていない場合、ClickOnce アプリケーション マニフェストに挿入されます。

  • ApplicationVersion を使って、ClickOnce アプリケーションのバージョンを指定します。 バージョンは 4 桁の数字です。 最後の数字が "*" (アスタリスク) である場合は、ApplicationRevision が、ビルド時にマニフェストに挿入される値に置き換えられます。

  • ApplicationRevision では、リビジョンを指定します。 この値は整数であり、IDE で発行するたびにインクリメントされます。 これは、コマンド ラインで実行されるビルドについては自動的にインクリメントされないことに注意してください。

  • Install では、そのアプリケーションがインストールされるアプリケーションであるか、Web から実行されるアプリケーションであるかを指定します。

  • InstallUrl (示されていません) は、ユーザーによるアプリケーションのインストール元となる場所です。 指定されている場合、この値は IsWebBootstrapper プロパティが有効になっていると setup.exe ブートストラップに書き込まれます。 UpdateUrl が指定されていない場合、これもアプリケーション マニフェストに挿入されます。

  • SupportUrl (表示されていません) は、インストールされたアプリケーションの [プログラムの追加と削除] ダイアログ ボックス内にリンクが表示される場所です。

以下のプロパティは、 [発行] ページからアクセスする [アプリケーションの更新] ダイアログ ボックスで設定されます。

  • UpdateEnabled では、アプリケーションで更新プログラムを確認する必要があるかどうかを指定します。

  • UpdateMode では、Foreground 更新を指定します。 .NET プロジェクト (.NET 5 以降) の場合、Background はサポートされていません。

  • UpdateUrl (示されていません) は、アプリケーションでの更新プログラムの受信元となる場所です。 指定されている場合は、この値がアプリケーション マニフェストに挿入されます。

以下のプロパティは、 [発行] ページからアクセスする [発行オプション] ダイアログ ボックスで設定されます。

  • PublisherName では、アプリケーションのインストール時または実行時に表示されるプロンプトに示される発行元の名前を指定します。 インストールされたアプリケーションでは、[スタート] メニューのフォルダー名を指定するためにも使われます。

  • ProductName では、アプリケーションのインストール時または実行時に表示されるプロンプトに表示される製品の名前を指定します。 インストールされたアプリケーションでは、[スタート] メニューのショートカット名を指定するためにも使われます。

以下のプロパティは、 [発行] ページからアクセスする [前提条件] ダイアログ ボックスで設定されます。

  • BootstrapperEnabled では、setup.exe ブートストラップを生成するかどうかを指定します。

  • IsWebBootstrapper では、setup.exe ブートストラップが Web 上またはディスク ベース モードのどちらで動作するかを指定します。

オプション: InstallURL、SupportUrl、PublishURL、UpdateURL を使う

次の表に、ClickOnce 配置の 4 つの URL オプションを示します。

URL オプション 説明
PublishURL ClickOnce アプリケーションを Web サイトに発行するために必要です。
InstallURL 省略可能。 インストール場所が PublishURL とは異なる場合は、この URL オプションを設定します。 たとえば、PublishURL を FTP パスに設定し、InstallURL を Web URL に設定できます。
SupportURL 省略可能。 サポート サイトが PublishURL とは異なる場合は、この URL オプションを設定します。 たとえば、SupportURL を会社のカスタマー サポート Web サイトに設定できます。
UpdateURL 省略可能。 更新プログラムの場所が InstallURL とは異なる場合は、この URL オプションを設定します。 たとえば、PublishURL を FTP パスに設定し、UpdateURL を Web URL に設定できます。