En C#, les développeurs doivent souvent charger dynamiquement des bibliothèques de liens dynamiques (DLL), en particulier lorsqu'ils utilisent des bibliothèques tierces ou des configurations d'exécution. Cet article vise à répondre aux questions fréquemment posées sur les limites de l'utilisation de la méthode Assembly.LoadFile() et à fournir une solution basée sur la réflexion et les objets dynamiques.
Comme mentionné dans la question, l'utilisation de Assembly.LoadFile() charge avec succès la DLL et permet de récupérer des informations telles que le nom de la classe. Cependant, il peut ne pas être possible d'appeler directement des méthodes dans une DLL chargée.
Pour surmonter cette limitation, les développeurs peuvent utiliser la réflexion, qui permet l'invocation dynamique de méthodes et d'objets d'opération au moment de l'exécution. Pour ce faire :
Récupérer l'objet Type de la classe : var type = DLL.GetExportedTypes().FirstOrDefault();
Créer une instance d'une classe : var c = Activator.CreateInstance(type);
Utilisez la méthode InvokeMember() pour appeler la méthode cible :
<code class="language-csharp"> type.InvokeMember("Output", BindingFlags.InvokeMethod, null, c, new object[] { "Hello" });</code>
Pour les applications ciblant .NET 4.0 ou supérieur, le mot-clé dynamique peut simplifier davantage ce processus. En utilisant cette approche, vous pouvez accéder directement aux membres sans réflexion de type :
<code class="language-csharp">dynamic c = Activator.CreateInstance(type); c.Output("Hello");</code>
Pour résumer, bien que Assembly.LoadFile() permette de charger une DLL, des objets de réflexion ou dynamiques sont nécessaires pour appeler les méthodes dans le module chargé. En fonction des exigences de l'application, les deux méthodes fournissent des solutions viables pour charger et utiliser dynamiquement des DLL lors de l'exécution en C#.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!