/moduleassemblyname (C# 編譯器選項)
指定組件,.netmodule 可存取該組件的非公開類型。
/moduleassemblyname:assembly_name
Arguments
- assembly_name
其非公用型別 .netmodule 可以存取的組件名稱。
備註
在建置 .netmodule時應該使用**/moduleassemblyname** ,且下列條件為 true 的位置:
.netmodule 需要存取現有組件中的非公用型別。
您知道 .netmodule 將建置在其中的組件名稱。
現存組件已將 friend 組件的存取權授與給 .netmodule將建置在其中的組件。
如需組件 .netmodule的詳細資訊,請參閱 /target:module (C# 編譯器選項)。
如需 friend 組件的詳細資訊,請參閱 Friend 組件 (C# 和 Visual Basic)。
這個選項在開發環境內無法使用;只有從命令列進行編譯時才能使用。
在 Visual Studio 中無法使用這個編譯器選項,而且無法利用程式設計的方式變更它。
範例
這個範例會使用私用型別建置組件,並且讓 friend 組件存取名為 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 的 friend 組件存取權限的組件中存取非公用型別。
// 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();
}
}