System.IO.FileLoadException во время загрузки сборки .NET: ошибка 0x8007007a

У нас возникла проблема, связанная с запуском нескольких приложений .NET собственной разработки на компьютерах с Windows 10 версии 1607. Иногда запустить приложение не удается. Это связано с тем, что загрузка зависимой сборки .NET не удалась. Сообщение об ошибке:

System.IO.FileLoadException: не удалось загрузить файл или сборку «[имя сборки], версия = [версия], культура = нейтральный, PublicKeyToken = [publickeytoken]» или одну из их зависимостей. Область данных, переданная системному вызову, слишком мала. (Исключение из HRESULT: 0x8007007A)

Проблема возникает примерно в 10% случаев запуска приложений в различных .NET-приложениях. Это происходит как с 32-битными, так и с 64-битными приложениями. Во время всех запусков также запускаются многие другие приложения, которые запускаются нормально. Интересно, почему мы получаем ошибку 0x8007007a? Может быть, это залог из-за разрушения кучи, случившегося раньше?

Вы можете увидеть соответствующие записи из FUSLOGVW ниже. Пути к файлам и имена сборок анонимны. Сборка, которую пытаются загрузить, имеет довольно длинное имя (59 символов без постфикса .dll). В качестве теста мы изменили название сборки на более короткое. К сожалению, проблема осталась. Добавление пробного пути в exe.config также не устранило проблему.

Кроме того, похоже, есть код более старой версии Microsoft Assembly Resolver, доступной на Github: https://github.com/fixdpt/shared-source-cli-2.0. Я подозреваю, что что-то не так в ConstructCodeBaseList в adlmgr.cpp. Но я не могу понять, что вызывает проблему.

*** Assembly Binder Log Entry  (2020/01/30 @ 13:48) ***

The operation failed.
Bind result: hr = 0x8007007a. The data area passed to a system call is too small.

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  C:\Program Files (x86)\XXX\XXX\XX.X.X.X\XXX\XXXXXXXXXXXXXX\ApplicationWeWantToStart.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: DisplayName = AnAssem.blyWi.th.AVeryLon.gNameAA.AAAAAAAA.AAAAAAAAAAA.AAAA, Version=13.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXXXXXXX
 (Fully-specified)
LOG: Appbase = file:///C:/Program Files (x86)/XXX/XXX/XX.X.X.X/XXX/XXXXXXXXXXXXXX/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = ApplicationWeWantToStart.exe
Calling assembly : ApplicationWeWantToStart, Version=13.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXXXXXXX.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Program Files (x86)\XXX\XXX\XX.X.X.X\XXX\XXXXXXXXXXXXXX\ApplicationWeWantToStart.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: AnAssem.blyWi.th.AVeryLon.gNameAA.AAAAAAAA.AAAAAAAAAAA.AAAA, Version=13.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXXXXXXX
LOG: GAC Lookup was unsuccessful.
ERR: Error occurred constructing the probing codebase list.
ERR: Unrecoverable error occurred during pre-download check (hr = 0x8007007a).

person dutchdukes    schedule 30.01.2020    source источник


Ответы (1)


Любое изменение проблемы с запуском может быть связано с этим Ссылка на службу поддержки Microsoft

person Bigtoe    schedule 30.01.2020