/moduleassemblyname(C# 编译器选项)
指定一个程序集,.netmodule 可以访问该程序集的非公共类型 .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,允许该 . 访问程序集中的非公共类型的 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();
}
}