我们使用反射在 wcf 中创建了一个可扩展项目。Web 服务在运行时加载不同的模块取决于输入请求。我们使用 .NET 反射来动态加载模块库。系统在 IIS 上运行。
在我们的测试中,我们注意到一旦通过反射加载,我们就无法替换现有的 dll。我们试图将我们的新 dll 复制到 bin 目录中,但我们收到类似于“应用程序使用的 dll”的错误,我们可以确保它只有我们的系统使用该 dll。但是替换 dll 可能会停止 IIS。但是我们需要在不停止 IIS 的情况下替换 dll。无论如何我们可以在代码级别处理这个吗?
感谢您的快速反应。
IOrder orderImpl = null;
try
{
string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\" + assemInfo.AssemblyQualifiedName + ".dll";
path = path.Replace("file:\\", "");
Assembly a = Assembly.LoadFile(path);
Type commandType = a.GetType(assemInfo.AssemblyQualifiedName + "." + assemInfo.ClassName);
orderImpl = (IOrder)commandType.GetConstructor(new System.Type[] { typeof(LocalOrderRequest) }).Invoke(new object[] { order });
}
catch (Exception ex)
{
throw new OrderImplException("-1", ex.Message);
}
感谢无国界医生