System.IO.FileLoadException при загрузке. NET сборка: ошибка 0x8007007a - PullRequest
1 голос
/ 30 января 2020

У нас возникла проблема, связанная с запуском нескольких собственных разработок. 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).

1 Ответ

0 голосов
/ 30 января 2020

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

...