Ghy*_*hal 25
首先你应该加载DLL
Assembly assembly = Assembly.LoadFrom("dllPath");
Run Code Online (Sandbox Code Playgroud)
然后,您可能需要将程序集添加到应用程序域
AppDomain.CurrentDomain.Load(assembly.GetName());
Run Code Online (Sandbox Code Playgroud)
之后,您可以从此程序集加载任何类型
Type t = assembly.GetType("typeName");
Run Code Online (Sandbox Code Playgroud)
然后使用反射,您可以执行此类型的方法
请注意,您可能需要在配置文件中添加以下内容.
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="dlls folder"/>
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
LoadFile与LoadFrom
小心 - 这些不是一回事.
LoadFrom()通过Fusion,可以重定向到另一个路径,但是如果已经在LoadFrom上下文中加载了相同的身份,则可以使用相同的身份.LoadFile()根本没有通过Fusion绑定 - 加载器只是继续并正好加载*调用者请求的内容.它不使用Load或LoadFrom上下文.因此,LoadFrom()通常会为您提供所要求的内容,但不一定如此.LoadFile()适用于那些真正非常想要的人.(*但是,从v2开始,策略将应用于LoadFrom()和LoadFile(),因此LoadFile()不一定完全是请求的内容.另外,从v2开始,如果具有其标识的程序集在GAC,将使用GAC副本.使用ReflectionOnlyLoadFrom()来加载您想要的 - 但是,请注意,无法执行以这种方式加载的程序集.)
LoadFile()有一个catch.由于它不使用绑定上下文,因此不会在其目录中自动找到其依赖项.如果它们在Load上下文中不可用,则必须订阅AssemblyResolve事件才能绑定它们.