.Net в любом случае сделает позднее связывание. До тех пор, пока вы не будете ссылаться на .dll до тех пор, пока вы действительно не захотите загрузить его, это будет работать.
Просто инкапсулируйте все ссылки (поля, свойства, методы, экземпляры) в отдельный класс или проект и создайте экземпляр только тогда, когда это необходимо. Затем вы можете попытаться поймать ошибку загрузки.
Посмотрите окно вывода Visual Studio, когда ваше приложение будет запущено, оно сообщит вам, когда оно пытается загрузить файл .dll.
Вы также можете посмотреть на эти события, чтобы приложение корректно обрабатывало ошибки:
AppDomain.CurrentDomain.AssemblyLoad += ...;
AppDomain.CurrentDomain.AssemblyResolve += ...;
AppDomain.CurrentDomain.UnhandledException += ...;
AppDomain.CurrentDomain.FirstChanceException += ...;
Вы также можете выбрать MEF . Это основа для поздней загрузки / привязки.