更新:2007 年 11 月
指定 .netmodule 可访问其非公共类型的程序集。
/moduleassemblyname:assembly_name |
参数
备注
生成 .netmodule 并满足以下条件时,应使用 /moduleassemblyname:
.netmodule 需要具有访问现有程序集中非公共类型的权限。
您知道 .netmodule 将生成到的程序集的名称。
现有程序集已经授予 .netmodule 将生成到的程序集友元程序集访问权限。
有关生成 .netmodule 的更多信息,请参见 /target:module(创建模块以添加到程序集)(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(); } } |
此代码示例通过引用以前生成的程序集和 .netmodule,生成程序集 csman_an_assembly。
复制代码 | |
---|---|
// 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 |