Добавить ссылку на библиотеку.NET, находящуюся в папке Windows System32.

Я использую DLL-файл.NET для операций с изображениями и добавил его в свое приложение на C# с помощью "Добавить ссылку" в обозревателе решений и использую его классы. Есть много приложений, которые используют эту DLL, поэтому я не хочу помещать файл DLL в папку конкретного приложения, как:

  • C:\Program Files\<Application Name>\ или же
  • C:\Program Files (x86)\<Application Name>\ или же
  • C:\ProgramData\<Application Name>\ или же
  • C:\Users\<Username>\AppData\

И хотел бы поместить файл DLL в общую папку, как C:\Windows\ или же C:\Windows\System32 папка или любая другая папка, которая общедоступна для всех приложений в Windows.

Он работает нормально, когда я помещаю файл dll в ту же папку вызывающего exe, но когда я помещаю его в C:\Windows\System32 каталог, код C# моего приложения не может найти DLL и выдает ошибку:

Невозможно загрузить DLL: указанный модуль не найден. (Исключение из HRESULT: 0x8007007E)

Как мне указать моему коду искать dll в каталоге system32 или в любом другом общем каталоге?

Какие другие общие папки я могу использовать для общих библиотек DLL и библиотек?

1 ответ

Решение

Для этого и предназначен Global Assembly Cache. Как указано в документации MS здесь.

Каждый компьютер, на котором установлена ​​среда выполнения с общим языком, имеет машинный кэш кода, называемый глобальным кэшем сборок. В глобальном кэше сборок хранятся сборки, специально предназначенные для совместного использования несколькими приложениями на компьютере.

Но есть и подводные камни, поэтому имейте в виду собственный совет MS:

Вы должны обмениваться сборками, устанавливая их в глобальный кеш сборок, только когда это необходимо. Как общее руководство, держите зависимости сборок в секрете и размещайте сборки в каталоге приложения, если явно не требуется совместное использование сборки.

Другие вопросы по тегам