WPFアプリケーションのCI/CDにはWindowsが必要
概要
WPFアプリケーションのテストやビルドを、GitLab Runnerを使ってやろうとしたらはまりました。
なぜはまったのかと、どのような方法をすればよいのかについて書きました。
やりたいこと
私は、ソースコードの管理として、主にGitLabを利用しています。GitLabでは、GitLab Runnerをインストールしたサーバーを用意して、それと連携をすることで、CI/CDをすることができます。今回は、このGitLabのCI/CD機能を利用して、Windows Presentation Foundation(WPF)アプリケーションのビルドをすることにしました。
WPFは、Windows専用のデスクトップアプリケーションソフトウェアを作成するフレームワークです。Windowsでしか動かすつもりがないソフトウェアについては、これを使うと簡単にソフトウェアを作ることができるので、重宝しています。ソースコードの管理は、前述のとおり、GitLabを利用しているのですが、せっかくならば、Gitのタグをつけたら、自動でビルドをしてリリースを行いたいところです。
しかしながら、実際にCI/CDでWPFを利用したソフトのビルドをしようとすると、とてもはまりました。
問題
GitLab Runnerは、Linux上で動かしていました。そうすると、次のコマンドを実行してビルドを行った際に、エラーが発生しました。
dotnet publish -c Release
error : MSB4803: The task "ResolveComReference" is not supported on the .NET Core version of MSBuild. Please use the .NET Framework version of MSBuild. See https://aka.ms/msbuild/MSB4803 for further details.
エラーの内容としては、COMの参照がサポートされていないというものです。
いろいろと調べてみると、これは、Linuxでビルドしようとしている関係で、WindowsでのWPFのビルドとは異なるコンパイラを利用しているため、ビルドできないということのようです。
Windows、Linux、macOSの複数のOSでビルドができる.NETを利用しているため、このようなエラーが出るのはおかしいと思ったのですが、WPFのビルドには、Windowsにのみ対応したコンパイラを利用してビルドが行われます。つまり、LinuxやmacOSなどのWindows以外の環境では、Windows専用のWPFのビルドはできません。
解決方法
私の環境では、GitLab RunnerをLinuxにインストールして使っていたため、この問題にぶつかりました。この問題を解決するには、Windows上でビルドを行います。
例えば、GitLab RunnerをWindowsにインストールすることで解決できます。
しかし、WindowsにGitLab Runnerをインストールするというのはとても面倒です。Windowsのライセンスを用意するのも大変ですし、サーバーを借りるにしても、Linuxよりも高価ですので、維持しにくいという問題もあります。
そこで今回は、WPFのCI/CDをすることを諦めました。
さいごに
最終的に、GitLab RunnerでCI/CDをすることを諦めるという、かっこ悪い結果となりました。
もしも、Windows Serverなどを利用していて、リソースが余っているということであれば、インストールなどしてみるとよいかもしれません。
みなさんの参考になればうれしいです。