Приложение .NET 10 не может загрузить зависимую dll из подкаталогаC#

Место общения программистов C#
Ответить
Anonymous
 Приложение .NET 10 не может загрузить зависимую dll из подкаталога

Сообщение Anonymous »

Я почти завершил миграцию нашего приложения с .NET 4.6 на .NET 10.
Все выглядит нормально, кроме одного: в .NET Framework мы использовали значение
в файле app.exe.config, и оно работало отлично. Мы могли бы удалить все сторонние библиотеки из этой папки и очистить наш основной каталог.
Но в новой .NET 10 это доставляет массу хлопот. Я хотел разрешить путь проверки с помощью кода

Код: Выделить всё

AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve,
AppDomain.CurrentDomain.AssemblyResolve,
AppDomain.CurrentDomain.TypeResolve,
AssemblyLoadContext.Default.Resolving
но это не работает должным образом: сборки, на которые ссылаются, не загружаются/разрешаются в функции Main().
Небольшой пример кода:

Код: Выделить всё

static Program()
{
MessageBox.Show("Start");
AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += CurrentDomain_ReflectionOnlyAssemblyResolve;
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
AppDomain.CurrentDomain.TypeResolve += CurrentDomain_TypeResolve;
AssemblyLoadContext.Default.Resolving += Default_Resolving;
}

[STAThread]
static void Main()
{
InitApp();

Application.Run(new frmMain());
}
Приложение НЕ запускается в конструкторе (

Код: Выделить всё

MessageBox.Show("Start")
не выполняется).
Поэтому у меня происходит тихий сбой приложения и следующее сообщение в журнале событий:
Изображение

Это происходит, даже если функция Main() совершенно пуста.
Такое ощущение, что dotnet пытается загрузите все указанные dll ПЕРЕД фактическим запуском приложения:
Изображение

В то же время все работает нормально, если я нахожу все связанные DLL в папке приложения.
Также AppDomain.CurrentDomain.AssemblyResolve работает отлично в проект Dll, перенесенный с .NET 4.6 на .NET 10, мы вызываем эту dll через COM-взаимодействие из файла MFC Exe. В этом случае AssemblyResolve срабатывает для каждой ссылки.
Я пытался использовать дополнительныеProbingPaths (безуспешно).

Код: Выделить всё

"runtimeOptions": {
"framework": {
"name": "Microsoft.NETCore.App",
"version": "2.0.0"
},
"additionalProbingPaths": ["./Lib/AppDlls"]
}
Теоретически я могу изменить пути в файле .deps.json, но хотелось бы избежать этого.
Я пытался использовать PROBING_PATH в конфигурации среды выполнения.
В журнале трассировки я вижу, что dotnet пытается найти библиотеки DLL только в моей корневой папке:
Изображение

Ребята, я понятия не имею, что еще делать. Надеюсь, вы мне что-нибудь посоветуете.
Спасибо большое.

Подробнее здесь: https://stackoverflow.com/questions/798 ... bdirectory
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»