🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# /moduleassemblyname (C# Compiler Option) 指定一个程序集,其非公共类型可由 netmodule 访问。 ## 语法 ``` /moduleassemblyname:assembly_name ``` ## 参数 _assembly_name_ 程序集的名称,.netmodule 可以访问该程序集的非公共类型。 ## 备注 应使用**/moduleassemblyname**,当生成 .netmodule,且满足以下条件的位置: * netmodule 需要具有访问现有程序集中非公共类型的权限。 * 知道 .netmodule 将生成的程序集的名称。 * 现存的程序集已经被授予.netmodule 将生成到的程序集友元程序集访问权限。 有关建立.netmodule 的更多信息,请参见 [/target:module (C# Compiler Options)](https://msdn.microsoft.com/zh-cn/library/58scf68s.aspx)。 有关友元程序集的更多信息,请参见 [友元程序集(C# 和 Visual Basic)](https://msdn.microsoft.com/zh-cn/library/0tke9fxk.aspx)。 此选项在开发环境中不可用;它仅在从命令行编译时才可用。 此编译器选项在 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 ``` ## 请参阅 [C# Compiler Options](https://msdn.microsoft.com/zh-cn/library/2fdbz5xd.aspx) [如何:修改项目属性和配置设置](https://msdn.microsoft.com/zh-cn/library/z15yzzew.aspx)