次の方法で共有


/moduleassemblyname (モジュールに対するフレンド アセンブリの指定) (C# コンパイラ オプション)

更新 : 2007 年 11 月

.netmodule からアクセスできる、パブリック型ではないアセンブリを指定します。

/moduleassemblyname:assembly_name

引数

  • assembly_name
    .netmodule からアクセスできる、パブリック型ではないアセンブリの名前。

解説

/moduleassemblyname は、.netmodule をビルドするとき、次の条件に当てはまる場合に使用します。

  • .netmodule から、既存のアセンブリにあるパブリック以外の型にアクセスする必要がある場合。

  • .netmodule をビルドするアセンブリの名前がわかっている場合。

  • 既存のアセンブリで、.netmodule をビルドするアセンブリに対して、フレンド アセンブリのアクセス権を認めている場合。

.netmodule のビルドの詳細については、「/target:module (アセンブリに追加するモジュールの作成) (C# コンパイラ オプション)」を参照してください。

フレンド アセンブリの詳細については、「フレンド アセンブリ (C# プログラミング ガイド)」を参照してください。

このオプションは開発環境内では利用できません。このオプションを利用できるのは、コマンド ラインからコンパイルするときだけです。

このコンパイラ オプションは、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 を指定して、.netmodule から、csman_an_assembly に対するフレンド アセンブリのアクセス権を許可したアセンブリに含まれる、パブリック以外の型にアクセスできます。

// 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();
    }
}

An_Internal_Class.Test called

参照

その他の技術情報

C# コンパイラ オプション

プロジェクト プロパティ (Visual Studio)