なぜ Monodevelop でビルドするのか

PeerCastStation の本家バイナリを mono で動かすと、例外発生時の呼び出しスタックトレースに、メソッド名までしか表示されません。 細かな調査をしていてファイル名と行番号も欲しい場合には、mono 用のデバッグ情報が実行時に利用可能である必要があります。(Windows/.NET 用の .pdb ファイルではなく .mdb ファイルが必要)

PeerCastStation の挙動をカスタマイズしたいだけの場合には、Windows 上の Visual Studio (無料でも利用できる)でビルドするのが良いでしょう。

やり方

github のレポジトリからソースコードをダウンロードします。

$ git clone git@github.com:kumaryu/peercaststation.git
Cloning into 'peercaststation'...
remote: Counting objects: 10985, done.
remote: Total 10985 (delta 0), reused 0 (delta 0), pack-reused 10985
Receiving objects: 100% (10985/10985), 20.57 MiB | 392.00 KiB/s, done.
Resolving deltas: 100% (7637/7637), done.
Checking connectivity... done.

Monodevelop で開いてみましょう。

$ monodevelop PeerCastStation/PeerCastStation.sln

open-solution

テスト系のプロジェクトで警告が出ていますが、無料版 Visual Studio でもテストはできないので問題ないです。

メニューバーの「ビルド」メニューから「再ビルド」を選びます。

nuget-error

おっと、エラーが出ました。Linux ではファイル名の大文字小文字が区別されるため、ファイルが見つからないようです。

以下のコマンドラインで、全てのプロジェクトファイルで文字列置換をします。

$ for i in PeerCastStation/*/*.csproj; do sed 's/nuget\.targets/NuGet.targets/g' < $i > /tmp/out; mv /tmp/out $i; done

再挑戦。

wpf-error

今度は PeerCastStation.WPFプロジェクトがビルドできずにエラーになってしまいました。これは Windows で動かした時に出る「GUI」ですが、ビルドできても mono では動かせないのでビルド対象から外しましょう。

左側のソリューションビューから PeerCastStation.WPF を右クリックして「Unload」を選択します。

もう一度「再ビルド」すると以下の場所にバイナリが出来上がりました。デバッグ情報である .mdb ファイルもできていますね。

$ ls PeerCastStation/PeerCastStation/bin/Debug/
Content
LICENSE.txt
Mono.Nat.dll
Newtonsoft.Json.dll
PeerCastStation.ASF.dll
PeerCastStation.ASF.dll.mdb
PeerCastStation.Core.dll
PeerCastStation.Core.dll.mdb
PeerCastStation.FLV.dll
PeerCastStation.FLV.dll.mdb
PeerCastStation.GUI.dll
PeerCastStation.GUI.dll.mdb
PeerCastStation.HTTP.dll
PeerCastStation.HTTP.dll.mdb
PeerCastStation.MKV.dll
PeerCastStation.MKV.dll.mdb
PeerCastStation.PCP.dll
PeerCastStation.PCP.dll.mdb
PeerCastStation.UI.HTTP.dll
PeerCastStation.UI.HTTP.dll.mdb
PeerCastStation.UI.dll
PeerCastStation.UI.dll.mdb
PeerCastStation.exe
PeerCastStation.exe.config
PeerCastStation.exe.mdb
Scripts
help
html
readme.txt
unblock.bat

詳細なスタックトレースを表示する

例外発生時のスタックトレースにファイル名と行番号を表示させるには、 mono 実行環境がデバッグモードである必要があります。したがって、PeerCastStation を実行する際には mono --debug PeerCastStation.exe とします。

拡張子 .exe や .dll のアセンブリ自体にはデバッグ情報が入っていないので、実行時に .mdb ファイルが存在する必要があることに注意してください。