TFS 2018 で MSIXの発行を行う
Visual Studio 2019からのMSIX形式のアプリパッケージの作成は、他サイトを参考にして出来るようになったので、TFS上でビルドする方法を調査しました。
一応、今回は以下の状態で始めました。
- .NET Core 3.1の32bitのWPFアプリケーション
- Visual Studio 2019の画面操作で、アプリパッケージの作成が一度成功している
- 配布方法は、サイドローディング
- コード署名証明書は、証明書ストアから選択している
- アプリケーション バンドルの生成は、常に行う
まずは、コマンドラインでビルドをしてみましたが、さっそく以下のエラーが発生。
error NETSDK1047: 資産ファイル 'C:\Users\(省略)\obj\project.assets.json' に '.NETCoreApp,Version=v3.1/win-x86' のターゲットがありません。 復元が実行されたこと、および 'netcoreapp3.1' がプロジェクト の TargetFrameworks に含まれていることを確認してください。 プロジェクトの RuntimeIdentifiers に 'win-x86' を組み込む必要が生じる可能性もあります。 [C:\Users\(省略).csproj]
MSIXパッケージでは、自己完結型デプロイメントをするため、RuntimeIdentifiersの設定が必要らしいです。
csprojファイルに以下を追加します。
<RuntimeIdentifiers>win-x86</RuntimeIdentifiers>
以下のコマンドで、コマンドラインからの作成が出来ました。(Developer PowerShell for VS 2019で実行しました)
> msbuild (プロジェクト名).wapproj /p:Configuration=Release /p:AppxBundlePlatforms=x86
プロパティなしで実行することも可能で、その場合はDebug構成のx86プラットフォームが選択されていました。指定しなかったプロパティは、wapprojファイルやappxmanifestファイルの値が使用されるようです。パッケージの作成とコード署名証明書による署名も行われていました。
TFSでのビルド、発行
コマンドラインからのビルドが出来たので、いよいよTFSでのビルドに入ります。
このサイトが参考になりました。対象がTFSではなく、後継のAzure DevOps(Azure Pipelines)なので、設定ファイルがYAMLで書かれているため、読むのがちょっと大変でした。
この記事は、MSDN Magagine 2019 の記事の一部ですが、PDF版もダウンロード可能です。PDF版はWeb版で省略された図や画面も含まれるので、PDF版を見た方が理解しやすいです。
コマンドラインでのビルドが出来ているので、それをタスクに置き換えます。
ただし、TFS 2018 だと「Visual Studioのビルド」タスクが、VS 2017までしか対応していないため、MSBuildタスクを使用し、ビルドを実行するPCのMSBuild へのパスを設定する必要があったので、以下のように設定しました。
MSBuildタスク
プロジェクト **/*.wapproj MSBuild へのパス C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\MSBuild.exe プラットフォーム x86 構成 Release MSBuild 引数 /p:AppxPackageDir=$(build.artifactstagingdirectory)\AppxPackages /p:AppxBundlePlatforms=x86
最後に、AppxPackagesフォルダを、配布用フォルダにコピーします。発行場所は「TFS」ではなく「A file share」を指定しました。ここはClickOnceの発行と同じですね。
成果物の公開タスク
発行するためのパス $(build.artifactstagingdirectory)\AppxPackages 成果物名 AppxPackagesの中身が格納されるフォルダ名 ファイル共有パス 成果物が格納されるフォルダの親フォルダ
動作環境
- TFS 2018 Update 3
- .NET Core 3.1
- ビルドマシン:Visual Studio 2019 Professional
以上