C# 如何解决“英特尔32位DLL未找到”异常?

C# 如何解决“英特尔32位DLL未找到”异常?,c#,asp.net,hunspell,C#,Asp.net,Hunspell,我使用以下代码进行拼写检查 当我运行它时,我得到一个DLLFileNotFound异常: “找不到Hunspell Intel 32位DLL:C:\project\splee\Hunspellx86.DLL” 代码段: 我在项目中引用了Hunspell.dll。出现什么问题?在解决方案资源管理器中右键单击NHunspell.DLL时,请确保将“复制本地”设置设置为“始终复制”。您需要在托管的NHunspell.DLL旁边包含本机X86.DLL 我是这样做的: 参考NHunspell 设置“复制本

我使用以下代码进行拼写检查

当我运行它时,我得到一个
DLLFileNotFound
异常:

“找不到Hunspell Intel 32位DLL:C:\project\splee\Hunspellx86.DLL”

代码段:
我在项目中引用了
Hunspell.dll
。出现什么问题?

在解决方案资源管理器中右键单击NHunspell.DLL时,请确保将“复制本地”设置设置为“始终复制”。

您需要在托管的
NHunspell.DLL
旁边包含本机
X86.DLL

我是这样做的:

  • 参考
    NHunspell
  • 设置“复制本地”属性
  • 在我的项目中包括
    NHunspellx86.dll
  • 设置“复制到输出目录”属性“如果更新,则复制”
    这确保了本机Hunspell.dll将就位。

    我使用NHunspell v 0.9.4在两种不同的场景中复制了此错误。NHunspell似乎针对加载相关非托管Hunspellx**.dll过程中可能出现的一系列问题显示了此错误消息

    我发现的第一个原因是运行我的webapp的特定IIS应用程序池没有启用32位应用程序。当然,只有在64位机器上运行32位webapp时,才与此相关


    我发现的第二个原因是IIS进程用户没有适当的权限来读取包含Hunspellx**.dll的文件夹。IIS用户(称为MACHINENAME\IIS_IUSRS之类的组)必须具有读取和执行webapp执行目录(和bin子文件夹)中的每个文件的权限。

    我在生产环境中遇到过此问题,当时非托管DLL的版本略早于ASP.Net项目的构建版本

    具体而言,FusLogVw表明:

    LOG: Assembly download was successful. Attempting setup of file: C:\ThePath\Hunspellx64.dll
    LOG: Entering download cache setup phase.
    ERR: Error extracting manifest import from file (hr = 0x80131018).
    ERR: Setup failed with hr = 0x80131018.
    ERR: Failed to complete setup of assembly (hr = 0x80131018). Probing terminated.
    

    更新到非托管DLL的正确版本解决了此问题。

    我在VB.net 2010中解决了此问题,如下所示,我假设在C#和更高版本的VB.net中也可以执行类似操作:

  • 在解决方案资源管理器中双击“我的项目”
  • 单击“查看应用程序事件”按钮
  • 添加如下所示的应用程序启动事件:

  • 我相信您也可以将NHunspellx**dll放在包含应用程序的.exe文件的文件夹中。

    这只是在验证NHunspellx**dll不在正确位置(在bin文件夹中)的情况下的有用解决方案。在我的例子中,DLL肯定是正确的。谢谢提示-也有同样的问题,但是IIS进程需要对目录的读取访问。然而,改变32位webapps的启用并不能解决我们的问题。
    LOG: Assembly download was successful. Attempting setup of file: C:\ThePath\Hunspellx64.dll
    LOG: Entering download cache setup phase.
    ERR: Error extracting manifest import from file (hr = 0x80131018).
    ERR: Setup failed with hr = 0x80131018.
    ERR: Failed to complete setup of assembly (hr = 0x80131018). Probing terminated.
    
     Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
         Hunspell.NativeDllPath = "D:\VB.net\_system\hunspell\dll\" '(replace path with folder containing Hunspellx86.dll)
     End Sub