C# 未找到DLL错误

C# 未找到DLL错误,c#,.net,error-handling,C#,.net,Error Handling,我有一个使用第三方库的情况。在未安装库的计算机上,我得到一个例外:无法加载DLL“*.DLL”:找不到指定的模块。来自HRESULT的异常:0x8007007E。但是,我将调用代码包装在try-catch块中 我尝试捕获Exception和DllNotFoundException,但都没有捕获到错误。然后,应用程序不正常地关闭 我希望应用程序捕获错误,然后在不使用第三方功能的情况下继续 我如何在不知道路径的情况下通过dll检查防止错误,或者优雅地捕获错误 编辑:更多详细信息 这是一个允许我使用u

我有一个使用第三方库的情况。在未安装库的计算机上,我得到一个例外:无法加载DLL“*.DLL”:找不到指定的模块。来自HRESULT的异常:0x8007007E。但是,我将调用代码包装在try-catch块中

我尝试捕获Exception和DllNotFoundException,但都没有捕获到错误。然后,应用程序不正常地关闭

我希望应用程序捕获错误,然后在不使用第三方功能的情况下继续

我如何在不知道路径的情况下通过dll检查防止错误,或者优雅地捕获错误

编辑:更多详细信息 这是一个允许我使用usb设备的第三方应用程序。我想他们已经为他们的非托管api提供了一个.net包装器。我以正常方式将托管dll添加到项目中


编辑:我设法获得了一个有问题的dll的路径。我正在做一个文件。存在于dll上,如果dll不存在,则不输入代码块。到目前为止,这似乎是可行的。谢谢你的帮助

异常是在抖动中抛出的,而不是在代码中抛出的,例如,在不同的线程上。这意味着您在这一点上是黄油面朝下。

引发异常的抖动使这一点有点棘手

您可以检查dll,但您必须记住,抖动将查找要加载的dll的时间

在加载依赖于该dll的任何类型之前,必须先检查dll。每当调用任何需要该类型的类型的方法时,就会加载该类型。哇!因此,基本上您需要确保不调用任何包含在调用需要第三方库的方法的类型中的方法

我为saftey所做的是:将对DLL的任何引用封装在一个从未被直接访问或引用的类型中——假设这是WrapperClass。检查DLL是否存在,如果存在,请使用Activator.CreateInstance。。。创建WrapperClass的实例


请注意,在.NET3.5之前,这一直适用于我。据我所知,不能保证在将来的版本中,甚至热修复程序中不会破坏此功能。

您没有说明如何导入此第三方库吗?您是否将其添加到项目中,并让VS自动为您创建包装器

或者您正在使用DLLImport:

[DllImport("thirdParty.dll")]
static extern int thirdPartyFunction(some params);
无论哪种方式,如果机器上没有安装thirdParty.dll,这两种方法都不会给您带来太多的乐趣

您需要执行所谓的LateBinding,请查看这篇关于如何执行的CodeProject文章