Не удалось загрузить файл или сборку 'Magick.NET-x86.DLL' или одну из ее зависимостей. Указанный модуль не может быть найден

Я видел запрос "Не удалось загрузить файл или сборку" Magick.NET-x86.DLL "или одну из его зависимостей" от Харша Гупты, и у меня возникла та же проблема, но без этих решений для меня.

У меня есть веб-приложение, включая ImageMagick, которое недавно установлено на новом экземпляре Windows Server 2012 (который мы переносим с экземпляра Windows Server 2008 R2). Приложение работает нормально на Server 2008 и локально, но не на Server 2012.

Я перестроил проект после обновления Magick.Net с 6.8.7.502 до 7.0.7.300, в надежде, что поддержка .Net Standard /.Net Core, упомянутая в Readme, представленной в 7.0.6, решит мою проблему, но безрезультатно. Перед этим я также установил VC++ 2012 и 2015, как упоминал Харш Гупта в принятом ответе.

Несмотря на все это, я все еще получаю страницу "Ошибка HTTP 500.0 - Внутренняя ошибка сервера", сообщающая мне:

Модуль: AspNetInitializationExceptionModule
Уведомление: BeginRequest
Обработчик: ExtensionlessUrlHandler-Integrated-4.0
Код ошибки: 0x00000000
Запрошенный URL: [отредактировано]
Физический путь: [отредактировано, но верно]
Метод входа: еще не определен
Пользователь входа: еще не определен

Журнал событий показывает событие Warning из ASP.NET 4.0.30319.0 с идентификатором события 1310 и следующей трассировкой стека:

Event code: 3008 
Event message: A configuration error has occurred. 
Event time: 9/20/2017 6:20:40 PM 
Event time (UTC): 9/20/2017 6:20:40 PM 
Event ID: 4775ecdb4601401ca30aa057f77ae78a 
Event sequence: 1 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: [redacted]
    Trust level: Full 
    Application Virtual Path: / 
    Application Path: [redacted]
    Machine name: [redacted]

Process information: 
    Process ID: 5096 
    Process name: w3wp.exe 
    Account name: IIS APPPOOL\[redacted]

Exception information: 
    Exception type: ConfigurationErrorsException 
    Exception message: Could not load file or assembly 'Magick.NET-x86.DLL' or one of its dependencies. The specified module could not be found.
   at System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)
   at System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()
   at System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai)
   at System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)
   at System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies()
   at System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded)
   at System.Web.Compilation.BuildManager.ExecutePreAppStart()
   at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)

Could not load file or assembly 'Magick.NET-x86.DLL' or one of its dependencies. The specified module could not be found.
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection)
   at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
   at System.Reflection.Assembly.Load(String assemblyString)
   at System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)



Request information: 
    Request URL: [redacted] 
    Request path: / 
    User host address: [redacted]
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: IIS APPPOOL\[redacted]

Thread information: 
    Thread ID: 8 
    Thread account name: IIS APPPOOL\[redacted]
    Is impersonating: False 
    Stack trace:    at System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)
   at System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()
   at System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai)
   at System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)
   at System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies()
   at System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded)
   at System.Web.Compilation.BuildManager.ExecutePreAppStart()
   at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)


Custom event details: 

Глядя в корень, bin папка содержит Magick.NET-x86.dll (и Magick.NET-Q16-x86.dll и Magick.NET-Q16-x86.Native.dll), а также IIS_IUSRs Группа имеет доступ на чтение к этим DLL (и всем остальным).

Несмотря на то, что это 64-разрядный сервер, AppPool имеет значение " Включить" для 32-разрядных приложений. Изменение режима управляемого конвейера в AppPool с интегрированного на классический также не имеет никакого эффекта. Однако я отмечаю, что количество приложений для AppPool указано как ноль (несмотря на то, что в диалоговом окне расширенных настроек веб-сайта отображается правильное имя AppPool): Скриншот AppPools

Я полностью в растерянности, и мы сейчас отстаем от графика миграции этого приложения, поэтому любые предложения будут с благодарностью приняты.

Спасибо!

Отредактировано, чтобы добавить: Есть немного больше информации в билете #107 на Github.

3 ответа

Решение

В отдельном разговоре на Github с создателем ImageMagick мы в конечном итоге приступили к проверке номеров версий DLL, что позволило нам понять это - а также ожидаемые файлы Magick.NET-Q16-x86.dll а также Magick.NET-Q16-x86-Native.dll как в версии 7.0.7.300 - был также файл Magick.NET-x86.dll это версия 6.8.7.502,

Цитирую Дирка Лемстра напрямую:

Magick.NET-x86.dll файл - это старый файл, которого там быть не должно. Можете ли вы удалить этот файл и проверить, решает ли это вашу проблему? Я прошу прощения за то, что не заметил этого намного раньше.

Вам больше не нужно устанавливать распространяемый C++. Необходимые библиотеки статически связаны, что означает, что вам больше не нужно их устанавливать.

Удаление этого лишнего файла решило проблему.

У меня нет ответа, но есть несколько идей по устранению неполадок, хотя вы, вероятно, попробовали это.

  1. Вы упоминаете, что apppool не показывает приложение. Попробуйте воссоздать пул приложений или использовать один из существующих приложений в качестве временного параметра, чтобы проверить, не возникла ли проблема с пулом приложений.
  2. Вы используете apppool я, что лучше, но делает переход на помощь учетной записи сетевого сервиса, если это указывает на проблему с разрешением.
  3. Вы сравнили установленные функции Windows на старых и новых серверах? Просто интересно, если это требует WCF.
  4. Был ли указан каталог bin для выполнения в iis.
  5. Работают ли основные страницы aspx или же их нарушает конфигурация?

Возможно, вы пробовали все это, но, надеюсь, это может помочь вам дать другое направление, даже если это не поможет напрямую.

Попробуйте использовать инструмент Global Cache Tool (gacutil.exe), чтобы опубликовать отсутствующую сборку в GAC:

gacutil.exe /i Magick.NET-x86.dll /f
gacutil.exe /i Magick.NET-Q16-x86.dll /f 
gacutil.exe /i Magick.NET-Q16-x86.Native.dll /f

Среда выполнения.NET сканирует сборки в GAC, когда не может найти сборку, на которую ссылается проект, по локальному пути. Обычно мы используем GAC для сборок, используемых несколькими приложениями, но мы можем попробовать этот подход для устранения неполадок.

Если рассматриваемое приложение успешно выполняется после публикации этих сборок в GAC, может быть проблема со ссылочными свойствами сборок в проекте, который их использует.

После тестирования мы можем удалить сборки, которые мы добавили из GAC:

gacutil.exe /u Magick.NET-x86 
...

gacutil.exe поставляется с.NET Windows SDK. Чтобы избежать установки этого на сервере, мы можем использовать PowerShell для установки сборок:

[Reflection.Assembly]::LoadWithPartialName("System.EnterpriseServices") > $null
[System.EnterpriseServices.Internal.Publish] $publisher = new-object System.EnterpriseServices.Internal.Publish
$publisher.GacInstall('Path\To\Magick.NET-x86.dll')

Оба инструмента требуют прав администратора на сервере.

Другие вопросы по тегам