Не удалось загрузить dll из GA C в приложении .NetCore - PullRequest
0 голосов
/ 04 апреля 2020

Мой пример консольного приложения (скажем, App1) разработан с использованием. Net Core 3.1 и вызывает другую .NetCore dll (скажем, Dll1). Я добавил в качестве ссылки DLL с «Копировать Local = Да». Я использую Visual Studio 2019 в качестве среды разработки.

Он работает нормально в прямом сценарии. Значит, когда я установил «Копировать локальный = Да» в приложении 1.

, я зарегистрировал это. Net Core dll (Dll1) в GA C и установил «Копировать локальный = нет» в приложении 1.

Теперь я не могу загрузить. Net Ядро (Dll1) и оно выдает ниже исключения.

Необработанное исключение. System.IO.FileNotFoundException: не удалось загрузить файл или сборку 'xxxxx, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = 66f432805192946d'. Система не может найти указанный файл. Имя файла: 'xxxxx, Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = 66f432805192946d' в xxxxx.Program.Main (String [] args)

Мои сомнения:

Ли. Net Core поддерживает вызов dll из GA C?

Пожалуйста, помогите мне решить эту проблему.

С уважением,

Хари

1 Ответ

3 голосов
/ 04 апреля 2020

Ваш вопрос

Имеет ли. Net Загрузка ядра сборок из глобального кэша сборок (GA C)?

Краткий ответ:

Нет

Длинный ответ:

Когда вы используете сборку с набором CopyLocal = false, это означает, что сборка ( Файл .dll) не будет помещен в выходной каталог того, что вы только что создали.

Здесь. Net Ядро работает иначе, чем. Net Framework:

In . Net Framework

Как только отсутствующая сборка используется где-то в вашем исполняемом коде, среда выполнения попытается найти ее, найти и загрузить. Для. Net Framework это происходит очень специфическим c способом , который включает в себя загрузку его из GA C (Global Assembly Cache), когда он доступен.

И вот что делает dotnetcore:

Эти приложения dotnetcore разработаны как самостоятельные и простые в обращении, и не хотят полагаться на свою среду. Вы доставляете все, что им нужно знать, вместе с ними. Таким образом, эти приложения не будут go искать пропавшие dll и не будут искать GA C. Это обычный метод развертывания, и он называется «автономное развертывание»

Однако существует нечто, называемое хранилище пакетов времени выполнения , которое может помочь в оптимизации развертывание, определив, что ваше. Net Базовое приложение не является «самодостаточным», а развернуто на определенной «платформе (= где определен набор библиотек для присутствия). Это называется ». зависимое развертывание "

Если вам нужна дополнительная информация о зависимом от платформы развертывании. Net Основные приложения

Посмотрите на это Есть Есть ли GA C эквивалент для. NET Core?

...