Для работы с Планировщиком заданий 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
Комментариев нет:
Отправить комментарий