/moduleassemblyname (C# コンパイラ オプション)
.netmodule が非パブリック型にアクセスできる アセンブリを指定します。
/moduleassemblyname:assembly_name
引数
- assembly_name
.netmodule からアクセスできる非パブリック型を持つ アセンブリの名前。
解説
/moduleassemblyname は、.netmodule をビルドするとき、 次の条件に当てはまる場合に使用します。
。 netmodule から、既存のアセンブリに含まれている非パブリック型にアクセスする必要がある場合。
.netmodule が組み込まれるアセンブリの名前が わかっている場合。
.netmodule が組み込まれるアセンブリに対して、既存のアセンブリが フレンド アセンブリ アクセスを認めている場合。
.netmodule のビルドの詳細については、「 /target:module (C# コンパイラ オプション)」を参照してください。
フレンド アセンブリの詳細については、「フレンド アセンブリ (C# および Visual Basic)」を参照してください。
このオプションは開発環境内では利用できません。このオプションを利用できるのは、コマンド ラインからコンパイルするときだけです。
このコンパイラ オプションは、Visual Studio で利用できず、プログラムで変更することもできません。
使用例
この例では、プライベート型のアセンブリをビルドし、csman_an_assembly というアセンブリにフレンド アセンブリ アクセスを許可しています。
// moduleassemblyname_1.cs
// compile with: /target:library
using System;
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleTo ("csman_an_assembly")]
class An_Internal_Class
{
public void Test()
{
Console.WriteLine("An_Internal_Class.Test called");
}
}
この例では、 アセンブリ moduleassemblyname_1.dll に含まれる非パブリック型にアクセスする .netmodule をビルドします。 この .netmodule は csman_an_assembly というアセンブリに組み込まれることがわかっているため、 /moduleassemblyname を指定できます。これで、csman_an_assembly にフレンド アセンブリ アクセスを許可したアセンブリ内の非パブリック型に .netmodule からアクセスできます。
// moduleassemblyname_2.cs
// compile with: /moduleassemblyname:csman_an_assembly /target:module /reference:moduleassemblyname_1.dll
class B {
public void Test() {
An_Internal_Class x = new An_Internal_Class();
x.Test();
}
}
このコード例では、アセンブリ csman_an_assembly をビルドし、以前にビルドしたアセンブリと netmodule になります。
// csman_an_assembly.cs
// compile with: /addmodule:moduleassemblyname_2.netmodule /reference:moduleassemblyname_1.dll
class A {
public static void Main() {
B bb = new B();
bb.Test();
}
}