日々のDraft

回答原案集

愚痴(mono上で動作するvbncがMicrosoft.VisualBasic.dllを見つけられない)

2012-04-23 11:45:51 | MonoDevelop/vbnc

環境: Mono 2.11.1 + MonoDevelop v2.9.4

Building Solution: Test1 (Debug|x86) ビルド中: Test1 (Debug|x86) Performing main compilation... vbnc.bat "-out:C:\Users\kubota\Documents\Projects\Tomoyuki\Tests\Test1\Test1\Test1\bin\Debug\Test1.exe" -nologo -utf8output -quiet -debug:full -optionstrict- -optionexplicit+ -optioncompare:binary -optioninfer- -rootnamespace:Test1 -target:exe "C:\Users\kubota\Documents\Projects\Tomoyuki\Tests\Test1\Test1\Test1\Test.vb" Warning: Option Strict Off will probably fail. Error : VBNC2017: The library 'Microsoft.VisualBasic.dll' could not be found. There were 1 errors and 0 warnings. Compilation took 00:00:00.3250000 ビルド完了 -- エラー 1件, 警告 0件 ---------------------- 完了 ---------------------- ビルド: エラー 1件, 警告 0件

以下、その他メモ。

  • 以前.NET 4.0以降向けにVBプロジェクトをビルドできるように作ったMonoDevelop.VBNetBinding.dllは役立たず。何故なら、IsSourceCodeFileとかのシグネチャ(引数の型)が変更されているから。
  • まず、本題の原因調査のため、MonoDevelop.VBNetBinding.dllを何度もビルドしつつ、入れ替えて動きを追おうと思った。途中、System.Func(TResult)が二重に定義されている等と言われて困惑するものの(何故か治った。解決した理由は正直わからないのだがw、二重定義の原因はなんとなく想像がつく。System.Funcは、.NET 3.5時代はSystem.Core.dllにあったのに、.NET 4.0ではmscorlibに移動していて、どうも対象フレームワークを.NET 4.0に合わせても.NET Framework 3.5時代のSystem.Core.dllを引きずったようなのだ。このプロジェクトはSystem.Coreに含まれる他のクラスも利用しているようだし、外せないんだよなあ)、何とかビルドしたアセンブリをMonoDevelopのアドイン用のディレクトリに入れても動かねーよ、なんでだよ、こんちくしょーとなったため、一応試してみようと思ってやってみたら前項の状況に気づいたというわけ。
  • ごちゃごちゃしているからMonoDevelopのソースごと削除
  • 当面は、「何故自前ビルドしたMonoDevelop.VBNetBinding.dllがオフィシャルビルドのMonoDevelop 2.9.4に認識されないか」の調査だなぁ…
  • 結構面倒なんだよ(泣)?MonoDevelop.Coreとか色々必要になるから、このコンポーネントだけをビルドしたいだけなのに毎回MonoDevelopまるごとビルドしているから。で、何故か自前ビルドのMonoDevelopはMS謹製.NET 4.0で何故か動作しないし…orz

原因は不明ながら本題が解決した。vbnc.batをコマンドプロンプトで呼び出しても再現し、かつ、vbnc.exeを直接呼び出しても再現しないことから、vbnc.batの中身を見て、mono.exe上でvbnc.exeを実行しているのを確認。これをコマンドプロンプトで打ち、それだけでも問題が再現することを確認。vbnc.batで、monoを利用せず、vbnc.exeを直接起動するよう書き換えることでHello Worldをコンパイルできるようになった。再度削除。MS謹製 .NET Frameworkのライブラリを参照しているから解決しているように見えるだけで何の解決にもなってない。

結局、色々考えるのは諦めてmono上で動作させる際、vbnc.bat(.NET 4.0用)とvbnc2.bat(.NET 2.0用)でvbnc.exeにsdkpathを与えることにした。面倒だからまだやってないけど。というわけで、GetToolPathも書き換える予定



最新の画像もっと見る

post a comment