.NET TIPS

[ASP.NET]ASP.NETでVB.NET固有の関数をC#から利用するには?

山田 祥寛
2005/05/27

 Visual Basic .NET(以下、VB.NET)の特長の1つとして、初学者でも直感的に分かりやすいさまざまな関数群が豊富に取りそろえられているという点が挙げられる。しかし、「TIPS:VB.NET固有の関数をC#で使用するには?」でも紹介しているように、VB.NETの関数は別にVB.NETだけでしか利用できないというものではない。関数の実体は、あくまで.NET Framework内で定義されているクラス・ライブラリであるので、実はC#などのほかの言語からでも自由に利用できるものなのだ。

 本稿では、ASP.NET+C#でVB.NET関数を利用する場合の、いくつかの設定方法について紹介することにしよう。なお、VB.NET関数の名前空間/モジュール/アセンブリに関する詳細は前掲のTIPSが詳しいので、併せて参照していただきたい。

1.ページ単位にVB.NET関数を有効化する

 ページ単位に、VB.NET関数(アセンブリ)を有効化するには、@Assemblyディレクティブを宣言すればよい。これによって、ASP.NETの動的コンパイル時に使用されるアセンブリを追加することができる。

<%@ Page Language="C#" ContentType="text/html" %>
<%@ Assembly Name="Microsoft.VisualBasic, Version=7.0.3300.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a" %>
<%@ Import Namespace="Microsoft.VisualBasic" %>
<script runat="Server">
void Page_Load(Object sender, EventArgs e){
  lbl.Text=Interaction.Environ("PATH");
}
</script>
<html>
<head>
<title>VB.NET関数をC#から利用する</title>
</head>
<body>
<asp:Label id="lbl" runat="Server" />
</body>
</html>
C#からVB.NET関数を利用するWebフォームのサンプル・プログラム(vbnet_func.aspx)

 Environ関数(InteractionクラスのEnvironメソッド)は、パラメータに指定された環境変数の値を表示するためのVB.NET関数だ。上記のサンプルを実行し、以下のような結果が確認できれば成功だ(ただし、サーバ環境によって表示される値は異なる)。

サンプル・プログラム(vbnet_func.aspx)の実行結果
Environ関数(InteractionクラスのEnvironメソッド)のパラメータに指定された環境変数の値が表示されている。ただし、サーバ環境によって表示される値は異なる。

 @Assemblyディレクティブの構文は、以下のとおりだ。

<%@Assembly {Name="アセンブリ名"|Src="アセンブリのパス"}%>
@Assemblyディレクティブの構文

 アセンブリ名は、

「アセンブリ名, Version=バージョン, Culture=カルチャ, PublicKeyToken=公開キートークン」

の完全修飾名の形式で記述すること。グローバル・アセンブリのバージョンやカルチャ、公開キートークンは、エクスプローラのツリーから「<Windowsフォルダ>\assembly」フォルダを開いて、該当アセンブリのプロパティ・シートを参照することで確認できる。

アセンブリ・ファイルのプロパティ・シート
グローバル・アセンブリのバージョンやカルチャ、公開キートークンは、エクスプローラのツリーから「<Windowsフォルダ>\assembly」フォルダを開いて、該当アセンブリのプロパティ・シートを参照することで確認できる。なお、この「assembly」フォルダの表示には、エクスプローラのシェル拡張が利用されているので、必ずエクスプローラのツリー表示から参照しなければならない。エクスプローラでの具体的な参照例は、「インサイド .NET Framework [改訂版] 第3回 アセンブリのロード」を見てほしい。

 なお、@AssemblyディレクティブのSrc属性ではパスを仮想パスで指定する必要がある。絶対パスでの指定はできないので、注意していただきたい。

 @Assemblyディレクティブでアセンブリを追加したら、あとは@ImportディレクティブでMicrosoft.VisualBasic名前空間をインポートすることで、「モジュール名.関数名」の形式でVB.NET関数を呼び出すことができる。ちなみに、Microsoft.VisualBasic名前空間に含まれるVB.NET関数と名前空間の対応については、「Visual Basic ランタイム ライブラリのメンバ」が詳しい。詳細は、こちらを参照していただきたい。

2.アプリケーション単位にVB.NET関数を有効化する

 1で紹介した手段は、最も手軽だが、アプリケーションの複数ページでVB.NET関数を利用するならば、ページごとにいちいち@Assemblyディレクティブを記述するのは好ましくない。一般的には、web.configでアプリケーション単位にアセンブリを有効にすることをお勧めする。web.configでアセンブリを有効にするには、以下のように記述すればよい。

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <system.web>
    <compilation>
      <assemblies>
        <add assembly="Microsoft.VisualBasic, Version=7.0.3300.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </assemblies>
    </compilation>
  </system.web>
</configuration>
アプリケーション単位にVB.NETの関数を有効にするための設定(web.config)

 <assemblies>要素配下における<add>要素のassembly属性に、Microsoft.VisualBasicアセンブリへの参照の追加を記述する。assembly属性の記法は、先の@AssemblyディレクティブのName属性のそれと同様だ。<add>要素は、有効化したいアセンブリの数だけ併記できる。

 先ほどのWebフォーム(vbnet_func.aspx)から@Assemblyディレクティブを取り除き、同様の結果が得られれば成功だ。

3.マシン単位でVB.NET関数を有効化する

 web.configの代わりに、machine.configに以下の記述を追加することで、マシン配下の全アプリケーションに対して一律にアセンブリを追加することも可能だ。

 ただし、アプリケーションそのものをほかの環境に移行した場合に、移行先のマシンでもmachine.configを設定しなければならない、machine.configの編集はマシン上のほかのアプリケーションに影響を及ぼす可能性がある、などの点を勘案すると、あまりお勧めできる方法ではない。あくまで以下に示すのは、参考程度の意味合いであると考えていただきたい。

<compilation ...>
  <assemblies>
    <add assembly="mscorlib"/>
    <add assembly="System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    <add assembly="System.Web, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
     ……中略 ……
    <add assembly="Microsoft.VisualBasic, Version=7.0.3300.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <add assembly="*"/>
  </assemblies>
</compilation>
全アプリケーションに対してVB.NETの関数を有効にするための設定(machine.config)

 なお、machine.configは「<Windowsフォルダ>\Microsoft.NET\Framework\<バージョン番号>\CONFIG」フォルダに含まれている。End of Article

カテゴリ:Webフォーム 処理対象:VB.NET関数
カテゴリ:C# 処理対象:VB.NET関数
関連TIPS:VB.NET固有の関数をC#で使用するには?
 
この記事と関連性の高い別の.NET TIPS
VB.NET固有の関数をC#で使用するには?
実行ファイルのパスを取得するには?
バージョン情報ダイアログを作成するには?
[参照の追加]ダイアログに独自のアセンブリを表示するには?
Visual Studio 2005でバージョン情報を設定するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間