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