TFS 2018 で ClickOnce の発行を行う
少し前に作成したWPFアプリケーションは、対象OSとしてWindows 8.1も含まれるため、フレームワークとして.NET Framework 4.5.1を使用しました。
Webアプリ(ASP.NET MVC)は、TFS上でビルド(XAMLではない)、リリースが出来るようにしたので(下記参照)
今回はデスクトップアプリケーションのビルド、ClickOnceによる発行をTFS上で試しました。
はじめに
TFSはビルド、リリースに分かれていて、ビルドが対象のビルドを行い、リリースで各環境への配置を行います。 ASP.NET MVCでは、リリースでIISの設定を行うため、ビルドとリリースに分けて使いました。
しかし、ClickOnceは、MSBuildのパラメータでビルド/発行を切り替えるし、発行先は1か所なので、リリースを使用せず、ビルドだけを使用しました。
作業開始
まず、「.NET デスクトップ」テンプレートを使用してビルド定義を作成しました。
WPFアプリケーションで、Prismを使用するためにPrism Template Packでプロジェクトを作成したところ、NuGetパッケージの管理方式に「PackageReference」を使用しており、リポジトリにpackagesフォルダが存在せず、リポジトリに使用するDLLを含めなくなりました。
そのため、NuGet関連タスクは削除せずに残すことにして、早速、ビルドを試しました。これはテンプレートのままで上手くいきました。
次に、ClickOnceの発行を試しました。「ソリューションのビルド」タスクのMSBuild引数で/target:publish
とすると、ClickOnce用のファイルが、app.publishフォルダに作成されます。
VSの画面から発行した場合とは違い、サーバへのファイルコピーは行われません。
以前にコマンドラインから実行したときは、csprojファイルを編集して、コピー処理を追加しました。これを今回はTFSのビルド定義のタスクで行う必要があります。
いろいろと試してみた結果、最終的にはファイルのコピー用に、二つのタスクを作成しました。
ファイルのコピータスク
ビルド結果から、app.publishフォルダだけをコピーします
ソースフォルダ $(system.defaultworkingdirectory) コンテンツ **\bin\$(BuildConfiguration)\app.publish\** !**\bin\$(BuildConfiguration)\app.publish\$(VsProject).exe ターゲット フォルダー $(build.artifactstagingdirectory)
成果物の公開タスク
app.publishフォルダを、配布用フォルダにコピーします。発行場所は、「TFS」ではなく「A file share」を指定しました。
発行するためのパス $(build.artifactstagingdirectory)\$(VsSolution)\bin\$(BuildConfiguration)\app.publish 成果物名 app.pubslihの中身が格納されるフォルダ名 ファイル共有パス 成果物が格納されるフォルダの親フォルダ
VsProject、VsSolution変数は、変数タブで作成し、値としてプロジェクト名、ソリューション名を登録しました。
つまづいた点
最初はファイルのコピータスクで、配布用フォルダへのコピーまでやろうとしたが、ソースフォルダ(リポジトリのルートパス)からのコピーになってしまい、階層が深くなってしまったので、分けることにしました。
成果物の公開タスクで、ファイルが圧縮されてしまわないか心配しましたが大丈夫でした(フォルダの内容がそのままコピーされました)
- TFS 2018 Update 3
- .NET Framework 4.5.1
以上