2009年11月3日

Microsoft.VisualBasic.dllを参照しない(その1)

VB.NETには、VB6に実装されていたCIntなどの型変換関数やLeft、Rightなどの文字列関数が使用できる。これらはMicrosoft.VisualBasic名前空間で定義されている。
個人的にはこれらはVB6との互換性の為に用意されたものと考えていて、あまり使用しないようにしている。名前付けのガイドラインにも沿っていないため、他の.NETなメソッドと並ぶと違和感があるというのもある。
注意:このエントリはVisual Basic 2005 Express Editionと.NET Framework2.0 SDK環境を元に書いています。
そんなわけでチーム開発の場合に、これら関数を使用しないよう、Microdoft.VisualBasic.dllを参照しないプロジェクトを作成しようと考えた。
Visual Studioのプロジェクトのプロパティから「参照」タブを開いてみると、すでに参照しているdllにMicrosoft.VisualBasic.dllが含まれていない。 

下の一覧にImportされる名前空間が表示されているが、そこには含まれている。
Importされる名前空間からチェックをはずし以下のソースを書いてみる
Public Class VisualBasicTest
    Public Shared Sub Main()
        Dim i As Integer = CInt("1991")
        System.Console.WriteLine(i)
    End Sub
End Class
だが、ビルドは通って実行もできてしまう。
逆アセンブリしてみる。
スタートメニューから「Microsoft .NET Framework SDK v2.0」→「Tools」→「MSIL 逆アセンブラ」を起動して、ビルドでできているexeを開く。すると、MANIFESTの部分を見てみると下記記述が見つかる。参照しているようだ。
.assembly extern Microsoft.VisualBasic
{
  .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
  .ver 8:0:0:0
}
きっとVisual Studioが何か余計なことをしているのだろう。ということで上記ソースをコマンドラインでビルドしてみる。
 >vbc VisualBasicTest.vb
Microsoft(R) Visual Basic Compiler Version 8.0.50727.3053
for Microsoft(R) .NET Framework version 2.0.50727.3603
Copyright (C) Microsoft Corporation.  All rights reserved.

 >VisualBasicTest.exe
1991
ビルド通る。実行できる。逆アセンブリしてみる。
.assembly extern Microsoft.VisualBasic
{
  .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
  .ver 8:0:0:0
}
参照している。。。
なかなかにしぶとい。諦めかけたが、ここで以前に似たような話が書かれたブログがあったことを思い出す。
次回へ続く。。

0 件のコメント:

コメントを投稿