Добавить ссылку на библиотеку.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:
Вы должны обмениваться сборками, устанавливая их в глобальный кеш сборок, только когда это необходимо. Как общее руководство, держите зависимости сборок в секрете и размещайте сборки в каталоге приложения, если явно не требуется совместное использование сборки.