Как мне разрешить 32-битную DLL-библиотеку Hunspell Intel не найденную?
Я использовал следующий код для проверки правописания.
Пока я бегу, я получаю DLLFileNotFound
исключение:
Msgstr "DLL-библиотека Hunspell Intel 32Bit не найдена: C:\project\splee\Hunspellx86.dll".
Фрагмент кода:
using (Hunspell hunspell = new Hunspell("en_us.aff", "en_us.dic"))
{
bool correct = hunspell.Spell("Recommendation");
var suggestions = hunspell.Suggest("Recommendation");
foreach (string suggestion in suggestions)
{
Console.WriteLine("Suggestion is: " + suggestion);
}
}
// Hyphen
using (Hyphen hyphen = new Hyphen("hyph_en_us.dic"))
{
var hyphenated = hyphen.Hyphenate("Recommendation");
}
using (MyThes thes = new MyThes("th_en_us_new.idx", "th_en_us_new.dat"))
{
using (Hunspell hunspell = new Hunspell("en_us.aff", "en_us.dic"))
{
ThesResult tr = thes.Lookup("cars", hunspell);
foreach (ThesMeaning meaning in tr.Meanings)
{
Console.WriteLine(" Meaning: " + meaning.Description);
foreach (string synonym in meaning.Synonyms)
{
Console.WriteLine(" Synonym: " + synonym);
}
}
}
Я сделал ссылку на Hunspell.dll
в проекте. Что не так?
5 ответов
Нужно включить родной Hunspellx86.dll
рядом с управляемым NHunspell.dll
,
Я сделал следующим образом:
- Реферировано
NHunspell
, - установить свойство Copy Local
- Включить
NHunspellx86.dll
к моему проекту - Установите свойство "Копировать в выходной каталог", "Копировать, если новее".
Это гарантирует, что родной Hunspell.dll будет на месте.
Я повторил эту ошибку в двух разных сценариях, используя NHunspell v 0.9.4. Похоже, что NHunspell показывает это сообщение об ошибке для ряда проблем, которые могут возникнуть в процессе загрузки соответствующего неуправляемого Hunspellx**. Dll.
Первой причиной, которую я обнаружил, было то, что в конкретном пуле приложений IIS, на котором запущено мое веб-приложение, не было включено 32-разрядных приложений. Это, конечно, уместно, только если вы запускаете 32-битное веб-приложение на 64-битной машине.
Вторая причина, которую я обнаружил, заключалась в том, что у пользователя процесса IIS не было соответствующих прав для чтения папки, содержащей Hunspellx**. Dll. Пользователи IIS (группа с именем что-то вроде MACHINENAME\IIS_IUSRS) должны иметь разрешение на чтение и выполнение каждого файла в каталоге выполнения веб-приложения (и подпапке bin).
Убедитесь, что для параметра "Локальное копирование" задано значение "Копировать всегда", если щелкнуть правой кнопкой мыши файл NHunspell.DLL в обозревателе решений.
Мне удалось решить эту проблему в VB.net 2010 следующим образом. Я предполагаю, что нечто подобное можно сделать в C# и более поздних версиях VB.net:
- Дважды щелкните "Мой проект" в обозревателе решений.
- Нажмите кнопку "Просмотр событий приложения".
- Добавьте событие запуска приложения, например:
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
Я полагаю, что вы также можете просто положить Hunspellx86.dll в папку, содержащую файл.exe вашего приложения.
У меня была эта проблема в производственной среде, когда версия неуправляемых 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 решило проблему.