我想在当前项目的单独解决方案中动态使用来自不同项目的类。我认为解决方案是将 dll 加载到我的项目中。我使用以下代码来完成我的任务并且它起作用了。string dllPath = @"the path of my dll";var DLL = Assembly.LoadFile(dllPath);foreach (Type type in DLL.GetExportedTypes()){ if (type.Name == "targetClassName") { var c = Activator.CreateInstance(type); try { type.InvokeMember("myMethod", BindingFlags.InvokeMethod, null, c, new object[] { "Params" }); } catch(Exception ex) { MessageBox.Show(ex.Message); } break; }}但是,我现在的问题是我想卸载dll,我不能这样做,因为Assembly中没有卸载方法。我找到的解决方案是我必须使用 AppDomain 加载程序集,然后卸载它。现在这是我的主要问题。我不断得到FileNotFoundException。这是我的代码:public class ProxyDomain : MarshalByRefObject{ public Assembly GetAssembly(string assemblyPath) { try { return Assembly.LoadFrom(assemblyPath); } catch (Exception ex) { throw new InvalidOperationException(ex.Message); } }}private void BuildButton_Click(object sender, EventArgs e){ string dllPath = @"DllPath"; string dir = @"directory Path of the dll"; AppDomainSetup domaininfo = new AppDomainSetup(); domaininfo.ApplicationBase = System.Environment.CurrentDirectory; Evidence adevidence = AppDomain.CurrentDomain.Evidence; AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, domaininfo); Type Domtype = typeof(ProxyDomain); var value = (ProxyDomain)domain.CreateInstanceAndUnwrap( Domtype.Assembly.FullName, Domtype.FullName); var DLL = value.GetAssembly(dllPath); // Then use the DLL object as before}最后一行是以下例外 Could not load file or assembly 'dll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.我已经尝试过此链接上的解决方案,但没有任何效果对我有用...我一直遇到相同的异常。之后我想卸载域,但是我无法解决加载dll的第一个问题。如何修复我的代码?编辑当我在我的项目的同一个 bin 文件夹中复制预期的 dll 时,它可以工作。但是,我不想在我的项目中复制 dll。有没有办法从它的路径加载它而不将它复制到我的 bin 文件夹?
1 回答
- 1 回答
- 0 关注
- 227 浏览
添加回答
举报
0/150
提交
取消