LoginSignup
18
16

More than 5 years have passed since last update.

[C#]Windowsで書いたソリューションをMacでビルドしたメモ

Last updated at Posted at 2015-05-14

Windowsで書いたC#ソリューションをMacでビルドするために友人とともにちょっと奮闘しましたので記録しておきます。手早く試したかったので、IDEなどのツールを使わない方法のメモになっています。
使用したソリューションは「冒険者は森に強い」というゲームのソースコードです。GitHubから参照できます。

概要

この記事で紹介する順番とは異なります。

  1. VisualStudioのソリューション(.sln)やプロジェクト(.csproj)をコンパイルするにはxbuildコマンドを使う
  2. NuGetパッケージを復元するにはNuGet.exeを実行する
  3. mono環境で利用できないライブラリの参照をなくす

brewでmonoをインストール

まだmonoをインストールしていない場合は、まずmonoをインストールする必要があります。友人はパッケージマネージャとしてbrewを使っていたので、それでmonoをインストールしました。次のコマンドでインストールします。

brew install mono

NuGetパッケージを復元する

用意したソリューションをビルドするために、NuGetパッケージの復元を行い、ソリューションが依存しているパッケージを復元する必要があります。まずは、復元を行ってくれるアプリケーションであるNuGet.exeを用意します。用意する方法ですが、今回はWebからダウンロードしてくるようにしましょう(友人と試したときは別の方法でした)。NuGetのサイトにアクセスし、"Direct Download"からnuget.exeをダウンロードして使うことにします。
mac1e.png

ダウンロードしてパスを通すなどの準備をしたら、次のコマンドを実行してください。monoコマンドはexeファイルをmac,linux上で実行するためのコマンドのようです。

mono NuGet.exe restore Rpg.sln

次のようにパッケージの依存関係が解決・インストールされます。

Installing 'Ix-Main 1.2.2'.
Successfully installed 'Ix-Main 1.2.2'.
Installing 'CsvHelper 2.10.0'.
Successfully installed 'CsvHelper 2.10.0'.

Mac環境で利用できないライブラリの参照をなくす

パッケージの参照を復元したらxbuildコマンドでコンパイルできるのですが、私のソリューションではMac環境で利用できないライブラリへの参照が混入していたようで、アセンブリ参照が足りていない旨のエラーが出ました。

今回のケースでは、テストプロジェクト(Rpg1.Testという名前でした)でMicrosoft.VisualStudio.TestTools.UnitTesting名前空間を参照していたのが原因だったので、テストプロジェクトを丸ごとソリューションのビルドから除外することにしました。ソリューションを管理できるツールがなかったので、ソリューションファイルを直接弄ってテストプロジェクトをビルド対象から外して対処しました。次のように数行削除すればOKです。

# 以下の2行を削除した
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rpg1.Test", "Rpg1.Test\Rpg1.Test.csproj", "{3D7A1777-D467-49AA-9CC8-2C76898114E8}"
EndProject

ビルド!

ビルドはxbuildコマンドで実行します。引数なしで実行するとカレントディレクトリにあるソリューションをビルドします。

結果:

1 Warning(s)
0 Error(s)

ビルドが通りました!「冒険者は森に強い」はWindows向けのゲームなので、Macではビルドはできても実行はできませんでしたが、コンソールアプリケーションなどでWindowsで書かれたものをMacで動かしてみたいという人はこのメモを参考にしてみてください。

NuGet.exeを入手するもう一つの方法

本記事ではNuGetのサイトからダウンロードしましたが、友人と試したときは別の方法を使っていました。まずWindows上のVisualStudioでソリューションを開き、ソリューション エクスプローラーを開いてソリューションを右クリック→「NuGet パッケージの復元の有効化」を実行することで、NuGet.exeを生成しました。本記事でこちらの方法を採用しなかったのは、Windowsが必要なことと、単純に面倒なこと、またVS2015 RCでは「NuGet パッケージの復元の有効化」がメニューに現れなかったことがあります。私はNuGetのサイトからダウンロードする方法を使えばいいと思います。

18
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
16