Не удалось загрузить dll из GAC в приложение .NetCore

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

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

Я зарегистрировал эту .Net Core dll (Dll1) в GAC и установил «Копировать Local = No» в App1.

Теперь я не мог загрузить .Net Core (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 из GAC?

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

С уважением,

Хари


person user3215105    schedule 04.04.2020    source источник
comment
.NET Core не имеет понятия о GAC   -  person Jonathan Alfaro    schedule 04.04.2020
comment
Frist Попытайтесь узнать немного о разнице между .net core и .net framework   -  person Kamran Shahid    schedule 04.04.2020


Ответы (1)


Ваш вопрос

Загружает ли .Net Core сборки из глобального кэша сборок (GAC)?

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

Неа

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

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

Здесь .Net Core действует иначе, чем .Net Framework:

В .Net Framework

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

Вот как работает dotnetcore:

Эти приложения dotnetcore разработаны так, чтобы быть автономными и простыми в использовании, и они не хотят полагаться на свою среду. Вы доставляете им все, что нужно знать, вместе с ними. Таким образом, эти приложения не будут искать отсутствующие библиотеки DLL, и они не будут искать в GAC. Это обычный метод развертывания, который называется автономным развертыванием.

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

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

Взгляните на этот Есть ли эквивалент GAC для .NET Core? < / а>

person Michael Schönbauer    schedule 04.04.2020