如何在运行时检查引用的程序集是否可用?

onu*_*ade 4 c#

我正在创建一个简单的,独立的.net winforms应用程序.它引用了Microsoft.SqlServer.SqlWmiManagement.Net Framework 4 的程序集,该程序集可能存在于客户端计算机上,也可能不存在.如果该程序集不存在,那么在运行时我希望我的应用程序优雅地失败而不是崩溃.

我有一个组件开始:

...
using Microsoft.SqlServer.SqlWmiManagement;
...
try {
    // do something that uses SqlWmiManagement
}
catch {
    // handle the missing assembly
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,在我的小块尝试块之前,组件加载时会抛出未处理的异常.

这样做的正确方法是什么?

没有安装程序,这应该是一个拖放exe.

CC *_*Inc 7

如果未找到程序集,则会触发AssemblyResolve事件.您可以尝试捕获并退出应用程序.请参阅此MSDN.

public static void Main()
{
    // Note: AssemblyResolve occurs when the resolution of an assembly fails.
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
}

private static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
{
    if ( args.Name.Contains("SqlWmiManagement"))
    {
        // assembly not found
    }

    return null;
}
Run Code Online (Sandbox Code Playgroud)