【问题标题】:C# .NET Is it possible to only run code if DLL file is present [duplicate]C# .NET 是否可以仅在存在 DLL 文件的情况下运行代码 [重复]
【发布时间】:2017-01-05 10:27:25
【问题描述】:

是否可以检查 DLL 文件是否存在,如果存在,则运行一些正在访问 DLL 的代码,但如果您随后删除 DLL 文件,代码将不会运行并开始引发异常?

【问题讨论】:

  • 托管还是非托管?

标签: c# dll


【解决方案1】:

您可以检查程序集 (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();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-06
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多