SNSへはこちら

【Tips】Mono単体パッケージでvbcが正常に動かない!?

小ネタです。

このブログの読者さんならご存知だと思いますが、僕は Mac を愛用しています。
Mac でも C# や VB ができる環境として、Mono というパッケージがあります。Linux でも有名ですね。

こちらのパッケージは単体でインストールできるし、一時期話題となった Visual Studio for Mac (中身は Xamarin)にも同梱されているアレです。
monomcs といったコマンドをご存じの方はよく見知っていることでしょう。

VBが使えない!?

brew install mono でインストールした Mono を早速使ってみようと、ハロワを書いたソースコードをビルドしてみます。C# は mcs src.cs で成功しました。が、VB では vbc src.vb としてもエラーが出てしまい正常に動作しません

$ vbc src.vb
Microsoft (R) Visual Basic Compiler version 3.5.0-beta4-20121-02 (00d6c926)
Copyright (C) Microsoft Corporation. All rights reserved.

vbc : error BC2017: The library 'Microsoft.VisualBasic.dll' could not be found

まさかのコンパイラが自己喪失です。VB のコンパイラなのに「自分が見つからない(意訳)」と言っていますね。これはいけない。
このエラーが起きたバージョンは上にも書いている通り、3.5.0-beta4-20121-02 (Build 00d6c926)です。というかだいぶ前からエラーを吐いていました。おいちゃんとメンテしろ。

使用しているコンパイラが多少違いますが、こちらのサイトでも悩まされているようですねぇ...

そもそも「イマドキ VB を使う必要はあるのか」という話ですが、あまりないと思います。しかし、僕が初めて触れたプログラミング言語が VB.NET(確か Visual Basic 2005 Express Edition だった)だったのです。それが中2の時。当然挫折しましたがね(イキナリ .NET とオブジェクト指向プログラミングを使いこなすのは無理)。ということで、せっかくだから想い出を蘇らせたいなあと考えているわけです。

解決法

完全にこちらのサイトのおかげです。感謝。

要は VB が使用するライブラリの dll ファイルへのリンクが適切に張られていなかったということが原因みたい。自分自身仕組みがあまり分かりませんが、ともかく必要なディレクトリに必要なファイル(リンク)が存在しなかったから「Microsoft.VisualBasic.dll ねぇぞ」って言っているわけですか。なるほど。

Mac の場合、インストールしたパッケージは全て /usr/local/Cellar に置かれますので、こちらについて弄ってあげればOKというわけです。

$ sudo ln -s /usr/local/Cellar/mono/6.8.0.123/lib/mono/4.0-api/Microsoft.VisualBasic.dll /usr/local/Cellar/mono/6.8.0.123/lib/mono/4.5/Microsoft.VisualBasic.dll
# 多分 sudo は要らない

解決

これにて問題解決です。ビルドも通りますし、ちゃんと動きます。

以下、プログラムと実行コマンド例。

Module Test
    Public Sub Main()
        Console.WriteLine("Hello")
    End Sub
End Module
$ vbc src.vb
Microsoft (R) Visual Basic Compiler version 3.5.0-beta4-20121-02 (00d6c926)
Copyright (C) Microsoft Corporation. All rights reserved.

$ mono src.exe
Hello

これがどなたかの役に立ちますように。以上!