【发布时间】:2017-01-05 10:27:25
【问题描述】:
是否可以检查 DLL 文件是否存在,如果存在,则运行一些正在访问 DLL 的代码,但如果您随后删除 DLL 文件,代码将不会运行并开始引发异常?
【问题讨论】:
-
托管还是非托管?
是否可以检查 DLL 文件是否存在,如果存在,则运行一些正在访问 DLL 的代码,但如果您随后删除 DLL 文件,代码将不会运行并开始引发异常?
【问题讨论】:
您可以检查程序集 (File.Exist) 是否存在,如果找到该文件,则从该程序集创建一个类型的实例,并对其调用方法。
类似这样的:
var assemblyLocation = "someLocation";
var methodToRun = "SomeMethod";
if (File.Exists(assemblyLocation))
{
var assembly = Assembly.LoadFile(assemblyLocation);
var instanceOfType = assembly.CreateInstance("SomeType");
if (instanceOfType != null) {
var methodInfo = instanceOfType.GetType().GetMethod(methodToRun);
if (methodInfo != null) {
methodInfo.Invoke(instanceOfType, null);
}
}
}
如果可以访问创建对象的类型(类或接口)当然可以改进,这样就不必使用反射来执行方法了。
像这样:
var assemblyLocation = "someLocation";
if (File.Exists(assemblyLocation))
{
var assembly = Assembly.LoadFile(assemblyLocation);
var instanceOfType = assembly.CreateInstance("SomeType") as SomeType;
if (instanceOfType != null) {
instanceOfType.SomeMethod();
}
}
【讨论】: