misc.log

日常茶飯事とお仕事と

ローカルコピー = Falseがもたらすもの

現在の案件(Visual Studio.NET 2003、VB.NET)、1つのソリューションに含まれるプロジェクトすべてのビルド出力先が、同一のフォルダに設定されているうえ、プロジェクトが参照する共通ライブラリもそのビルド先においてある。この状態でビルドを行う場合、各プロジェクトが参照するアセンブリの「ローカルコピー」プロパティをFalseにしないと、書き出し先と参照先と、ほかのプロジェクトの参照が全部激突する。

これについては、マイクロソフトはこのような使い方をサポートしていないとKBで明言しているので、そもそもだめなんだが、変えようとしない人たちが居るので仕方なくそのままになっている。実際、この運用形態が原因で、Visual Studioがエラーを出したり、ビルドに失敗したりという問題が頻発している。

で、これがもたらす問題がもう1つ増えた。

VBCommenterで作成したXMLコメントを、コマンドラインビルドのバッチで自動ビルドした際にXMLファイルにし、開発者に配布しようとしたところ、いくつかのプロジェクトでこんなエラーが。

リソースを準備しています...
参照を更新しています...
メイン コンパイルを実行しています...
サテライト アセンブリをビルドしています...
System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに
設定されていません。
   at VBCommenter.XmlWriter.GetTypes(Type[] types, ArrayList allTypes)

国内サイトにはどうもこれに関連する情報が無いので、VBCommenterを作っていた人たちのForumでこんなのを見つけた(http://www.gotdotnet.com/workspaces/messageboard/Thread.aspx?id=112b5449-f702-46e2-87fa-86bdf39a17dd&threadid=2cc235a5-da06-4d41-85ff-a93c8aec2c35)。

■1.2.6betaに関する報告の1つ
One of the assemblies (a com interop assembly) I use in my projects fails in 
LoadNamespaces during a call to the GetTypes(assem.GetTypes(), types) 
with a TypeLoadException. 
It stops the processing of the one method it was documenting, but the 
remainder of the class completed. 
 do not know why it is not loading, and actually don't care since after 
adding a catch with a log writer line to my version of VBCommenter 
based on the posted release version of 1.2.6 it generates correct documentation. 
■それに対する応答
I had the same problem with some of my stuff. I had 3 different assemblies that 
were resolved via Project Reference Path settings. This was happening due to 
the "Copy Local = False" setting for the referenced assemblies (ie they weren't 
copied to the Project Dir), and they weren't in the GAC. 

というわけで、全ソースのビルド先設定を変えるまで、夜間ビルドでのXMLコメントファイル生成はおあずけ。

これなんかを今のマネージャに言うと、「だからマイクロソフトは」とか言い出すんだけど..問題はそこじゃないのよ...と。あなたの居る会社がマイクロソフト系の開発環境を大規模に取り入れている以上、まずはそれをどう使いこなすか、ということを考えてくれ、と言いたい。愚痴ってるんじゃなくてね。