指定 .netmodule 可以访问其非公共类型的程序集。
-moduleassemblyname:assembly_name
assembly_name | .netmodule 可以访问其非公共类型的程序集名称。 |
在生成 .netmodule 时,如果以下条件为真,则应使用 -moduleassemblyname:
•.netmodule 需要访问现有程序集中的非公共类型。
•您知道 .netmodule 将被编译到的程序集名称。
•现有程序集已授予友元程序集访问 .netmodule 的权限。
有关生成 .netmodule 的更多信息,请参阅 -target:module.
有关友元程序集的更多信息,请参阅友元程序集。
此选项在开发环境中不可用;只有在命令行编译时才可用。
该编译器选项在 Visual Studio 中不可用,也不能通过编程更改。
此示例创建了一个具有私有类型的程序集,并允许友元程序集访问名为 csman_an_assembly 的程序集。
-/ moduleassemblyname_1.prg
-/ 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");
}
}
本示例将生成一个 .netmodule,该模块将访问程序集 moduleassemblyname_1.dll 中的非公共类型。我们知道该 .netmodule 将被内置到名为 csman_an_assembly 的程序集中,因此可以指定 -moduleassemblyname,允许 .netmodule 访问已授予 csman_an_assembly 友元程序集访问权限的程序集中的非公共类型。
-/ moduleassemblyname_2.prg
-/ 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.prg
-/ compile with: -addmodule:moduleassemblyname_2.netmodule -reference:moduleassemblyname_1.dll
class A {
public static void Main() {
B bb = new B();
bb.Test();
}
}