Dynamisches Laden von DLL in C#
C# ermöglicht das dynamische Laden und Verwenden von DLLs zur Laufzeit. Die Methode Assembly.LoadFile()
ermöglicht das Laden einer DLL in eine Anwendung.
Problem: Methoden aus einer geladenen DLL können nicht in einer Konsolenanwendung verwendet werden
Benutzer berichteten, dass sie die DLL laden, aber nicht auf ihre Methoden zugreifen konnten. Dies liegt daran, dass der C#-Compiler Typen und Member in der DLL nicht vorab auflösen kann. Um Methoden in einer DLL aufzurufen, müssen Sie Reflektion oder dynamische Objekte verwenden.
Lösung 1: Reflexion verwenden
Reflection ermöglicht das Abrufen von Typmetadaten und das Aufrufen seiner Mitglieder zur Laufzeit. Die Verwendung von Reflection erfordert den expliziten Aufruf der Methode:
<code class="language-csharp">// 加载 DLL var assembly = Assembly.LoadFile(@"C:\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\DLL.dll"); // 遍历 DLL 中导出的类型 foreach (Type type in assembly.GetExportedTypes()) { // 创建类型实例 var instance = Activator.CreateInstance(type); // 调用方法 (假设方法名为 "Output" 并接受一个字符串参数) type.InvokeMember("Output", BindingFlags.InvokeMethod, null, instance, new object[] { "Hello" }); }</code>
Lösung 2: Verwenden Sie dynamische Objekte (.NET 4.0 und höher)
Dynamische Objekte ermöglichen den Aufruf von DLL-Methoden im Code ohne explizite Typkonvertierung und mit einer einfacheren Syntax:
<code class="language-csharp">// 加载 DLL var assembly = Assembly.LoadFile(@"C:\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\DLL.dll"); // 遍历 DLL 中导出的类型 foreach (Type type in assembly.GetExportedTypes()) { // 创建动态实例 dynamic instance = Activator.CreateInstance(type); // 调用方法 (假设方法名为 "Output" 并接受一个字符串参数) instance.Output("Hello"); }</code>
Beide Lösungen zeigen, wie man dynamisch auf Methoden in einer DLL zugreift. Welche Methode Sie wählen, hängt von Ihrer .NET-Version und Ihren persönlichen Vorlieben ab. Reflection bietet eine feinere Kontrolle, während dynamische Objekte den Code vereinfachen. Beachten Sie, dass @"C:visual studio 2012ProjectsConsoleApplication1ConsoleApplication1DLL.dll"
durch den tatsächlichen Pfad zu Ihrer DLL ersetzt werden muss.
Das obige ist der detaillierte Inhalt vonWie kann ich auf Methoden innerhalb einer dynamisch geladenen DLL in einer C#-Konsolenanwendung zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!