AppDomain.ReflectionOnlyGetAssemblies 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
傳回已經載入到應用程式定義域之僅限反映的內容之組件。
public:
cli::array <System::Reflection::Assembly ^> ^ ReflectionOnlyGetAssemblies();
public System.Reflection.Assembly[] ReflectionOnlyGetAssemblies ();
member this.ReflectionOnlyGetAssemblies : unit -> System.Reflection.Assembly[]
Public Function ReflectionOnlyGetAssemblies () As Assembly()
傳回
- Assembly[]
Assembly 物件的陣列,代表已經載入到應用程式定義域中僅限反映之內容的組件。
例外狀況
嘗試在卸載的應用程式定義域中執行作業。
範例
下列程式碼範例會將System.dll元件載入執行內容,然後再載入僅限反映的內容。 GetAssemblies和 ReflectionOnlyGetAssemblies 方法可用來顯示載入至每個內容中的元件。
using namespace System;
using namespace System::Reflection;
#using <System.dll>
using namespace System::Timers;
using namespace System::Collections;
int main()
{
// Get the assembly display name for System.dll, the assembly
// that contains System.Timers.Timer. Note that this causes
// System.dll to be loaded into the execution context.
//
String^ displayName = Timer::typeid->Assembly->FullName;
// Load System.dll into the reflection-only context. Note that
// if you obtain the display name (for example, by running this
// example program), and enter it as a literal string in the
// preceding line of code, you can load System.dll into the
// reflection-only context without loading it into the execution
// context.
Assembly::ReflectionOnlyLoad( displayName );
// Display the assemblies loaded into the execution and
// reflection-only contexts. System.dll appears in both contexts.
//
Console::WriteLine( L"------------- Execution Context --------------" );
IEnumerator^ myEnum = AppDomain::CurrentDomain->GetAssemblies()->GetEnumerator();
while ( myEnum->MoveNext() )
{
Assembly^ a = safe_cast<Assembly^>(myEnum->Current);
Console::WriteLine( L"\t{0}", a->GetName() );
}
Console::WriteLine( L"------------- Reflection-only Context --------------" );
IEnumerator^ myEnum1 = AppDomain::CurrentDomain->ReflectionOnlyGetAssemblies()->GetEnumerator();
while ( myEnum1->MoveNext() )
{
Assembly^ a = safe_cast<Assembly^>(myEnum1->Current);
Console::WriteLine( L"\t{0}", a->GetName() );
}
}
using System;
using System.Reflection;
using System.Timers;
public class Example
{
public static void Main()
{
// Get the assembly display name for System.dll, the assembly
// that contains System.Timers.Timer. Note that this causes
// System.dll to be loaded into the execution context.
//
string displayName = typeof(Timer).Assembly.FullName;
// Load System.dll into the reflection-only context. Note that
// if you obtain the display name (for example, by running this
// example program), and enter it as a literal string in the
// preceding line of code, you can load System.dll into the
// reflection-only context without loading it into the execution
// context.
Assembly.ReflectionOnlyLoad(displayName);
// Display the assemblies loaded into the execution and
// reflection-only contexts. System.dll appears in both contexts.
//
Console.WriteLine("------------- Execution Context --------------");
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
Console.WriteLine("\t{0}", a.GetName());
}
Console.WriteLine("------------- Reflection-only Context --------------");
foreach (Assembly a in AppDomain.CurrentDomain.ReflectionOnlyGetAssemblies())
{
Console.WriteLine("\t{0}", a.GetName());
}
}
}
open System
open System.Reflection
open System.Timers
// Get the assembly display name for System.dll, the assembly
// that contains System.Timers.Timer. Note that this causes
// System.dll to be loaded into the execution context.
let displayName = typeof<Timer>.Assembly.FullName
// Load System.dll into the reflection-only context. Note that
// if you obtain the display name (for example, by running this
// example program), and enter it as a literal string in the
// preceding line of code, you can load System.dll into the
// reflection-only context without loading it into the execution
// context.
Assembly.ReflectionOnlyLoad displayName |> ignore
// Display the assemblies loaded into the execution and
// reflection-only contexts. System.dll appears in both contexts.
printfn "------------- Execution Context --------------"
for a in AppDomain.CurrentDomain.GetAssemblies() do
printfn $"\t{a.GetName()}"
printfn "------------- Reflection-only Context --------------"
for a in AppDomain.CurrentDomain.ReflectionOnlyGetAssemblies() do
printfn $"\t{a.GetName()}"
Imports System.Reflection
Imports System.Timers
Public Class Example
Public Shared Sub Main()
' Get the assembly display name for System.dll, the assembly
' that contains System.Timers.Timer. Note that this causes
' System.dll to be loaded into the execution context.
'
Dim displayName As String = GetType(Timer).Assembly.FullName
' Load System.dll into the reflection-only context. Note that
' if you obtain the display name (for example, by running this
' example program), and enter it as a literal string in the
' preceding line of code, you can load System.dll into the
' reflection-only context without loading it into the execution
' context.
Assembly.ReflectionOnlyLoad(displayName)
' Display the assemblies loaded into the execution and
' reflection-only contexts. System.dll appears in both contexts.
'
Dim ad As AppDomain = AppDomain.CurrentDomain
Console.WriteLine("------------- Execution Context --------------")
For Each a As Assembly In ad.GetAssemblies()
Console.WriteLine(vbTab + "{0}", a.GetName())
Next a
Console.WriteLine("------------- Reflection-only Context --------------")
For Each a As Assembly In ad.ReflectionOnlyGetAssemblies()
Console.WriteLine(vbTab + "{0}", a.GetName())
Next a
End Sub
End Class
備註
這個方法會傳回已載入至僅限反映內容的元件。 若要取得已載入以供執行的元件,請使用 GetAssemblies 方法。