我编写了一段代码,可以根据需要从磁盘加载DLL文件,然后在客户端完成使用后卸载它们。这个想法是那些DLL正在实现客户端已知的接口,客户端可以将它们用作插件。
在我的第一次测试中,一切似乎都很好,直到我创建了第二个"插件"。第二个插件与我的第一个测试用例相同,但我得到了一个System.Runtime.Serialization.SerializationException。下面你看我能解决的课程。
namespace ResolverTest.TestController1
{
using System;
...
[Serializable]
public class TestController1 : IProductController
{
public IProductConfigurationValidationResult ValidateProductConfiguration(ProductConfiguration productConfiguration)
{
var result = new ProductConfigurationValidationResult();
result.Success = true;
return result;
}
public IPerformanceCreationResult CreateProductConfigurationPerformance(ProductConfiguration productConfiguration)
{
throw new System.NotImplementedException();
}
}
}
这是无法解决的课程。
namespace ResolverTest2.TestController2
{
using System;
...
[Serializable]
public class TestController2 : IProductController
{
public IProductConfigurationValidationResult ValidateProductConfiguration(ProductConfiguration productConfiguration)
{
var result = new ProductConfigurationValidationResult();
result.Success = true;
return result;
}
public IPerformanceCreationResult CreateProductConfigurationPerformance(ProductConfiguration productConfiguration)
{
throw new System.NotImplementedException();
}
}
}
我得到的确切例外是:
未处理的异常:System.Runtime.Serialization.SerializationException:输入i 没有为成员解析' ResolverTest2.TestController2.TestController2,Resolve rTest2.TestController2,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'。
请注意,这两个类都是公共的,因此访问它们没有问题。处理将DLL加载到appdomain中的类继承了MarshalByRefObject,以便正确定义部分。好像TestController1和TestController2之间有一些不同之处。 .net版本是相同的,我甚至检查了程序集信息。它们没有彼此不同的依赖关系,并且它们的引用列表完全相同。最后但并非最不重要的是,解析DLL的类检查传递的路径是否正确,否则抛出异常。
我还应该注意什么?