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などを利用していて、リソースが余っているということであれば、インストールなどしてみるとよいかもしれません。

みなさんの参考になればうれしいです。