如何尝试捕捉未找到的assembly
好吧,说我有这样的应用程序:
using System; using AliensExist; // some DLL which can't be found...
我想要的是,如果无法找到程序集DLL AlienExist,应用程序将不会返回错误 – 而是“trycatched”,类似于……:
using System; try{ using AliensExist; // some DLL which can't be found... } catch {}
怎么做? 我知道use关键字以后不能使用…但我现在太懒了测试它。
10倍!
你不能在try / catch中真正做到这一点,但你可以做的是处理AppDomain上的AssemblyResolve
事件。
有关更多详细信息,请参阅https://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx 。
但是,您至少需要编译代码。 如果您试图“引用”可能存在或可能不存在的程序集,则需要动态加载它并从那里开始工作。
我认为你试图在运行时加载程序集,而不是编译时,正确吗?
如果是这样,请检查一下: C#在运行时加载程序集 。
老问题,但我觉得这个信息需要添加:
您不能尝试/捕获using语句,但您可以尝试/捕获程序集的解析 。
如果您按照Mike Atlas的建议手动加载程序集,您可以获得更多控制权。
此外,您可以在尝试解析之前手动validation程序集,方法是从GetEntryAssembly.GetReferencedAssemblies()中选择并比较AssemblyName.GetAssemblyName()之类的内容 。
当然,在某些情况下,您可以使用简单的File.Exists(AssemblyPath)
,但上述方法有助于validation其他程序集问题,例如版本编号或签名。
通过提供基于事件的方法, AssemblyResolve
很不错。 如果你有很高的圈复杂度和/或想要与JIT一起骑行,但是比前期validation更少信息,那就太好了。
请注意快速失败的主体,以及程序集解决错误可能限制function的程度。
上述就是C#学习教程:如何尝试捕捉未找到的assembly分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1006045.html