Страницы

Поиск по вопросам

среда, 24 октября 2018 г.

Изменение имени dll с исходного Microsoft.Win32.TaskScheduler.dll на my.dll делает её неработоспособной

Для работы с Планировщиком заданий Windows я использую библиотеку Task Scheduler (устанавливаю через Nuget Package Manager: https://archive.codeplex.com/?p=taskscheduler).
Если установить nuget пакет, выполнить сборку проекта, в папке с исполняемым файлом появится файл Microsoft.Win32.TaskScheduler.dll, на который есть ссылка в проекте. Если библиотеку (файл dll) вынуть из проекта, удалить пакет, положить на место и сделать ссылку на неё - всё будет работать так же нормально. Ничего нового.
Но вот стоит поменять имя файла библиотеки, снова сделать ссылку, удалив прежнюю, это дело работать уже не будет. Т.е. изменение имени dll (с исходного "Microsoft.Win32.TaskScheduler.dll" на, например, "my.dll") делает её неработоспособной... В чём проблема?


Ответ

Да, CLR устроена так, что в общем случае нельзя просто взять и переименовать сборку. По умолчанию, CLR при поиске сборки ориентируется на ее внутреннее имя (из метаданных), но при этом ищет не по внутреннему имени, а по имени файла, т.е. по строкам типа [application base] / [assembly name].dll и т.п. Если нужно, чтобы при поиске сборки использовалось имя файла, нужно использовать параметр codebase в конфигурации:
...

...

Если сборка использует строгое имя, нужно будет указать больше параметров:

Документация: How the Runtime Locates Assemblies

Комментариев нет:

Отправить комментарий