Исходя из вашего комментария:
Я экспериментировал, и это
кажется, что пока я определяю
одни и те же классы, а имена DLL остаются
то же самое, физически меняя DLL
в каталоге работает нормально. Вы
знать о любых проблемах, или
недостатки этого подхода?
Основная проблема / недостаток этого подхода заключается в обеспечении того, чтобы вы держали классы / методы, предоставляемые обеими DLL, на уровне блокировки. Вероятно, лучший способ сделать это, учитывая, что у вас есть модель:
PROGRAM -> REFERENCED DLL -> [One of two "Backend DLL's]
Было бы создать абстрактные классы / интерфейсы в «REFERENCED DLL», которые определяют классы / методы, которые должны быть представлены обеими «Backend DLL», а затем иметь обе ссылки на внутреннюю DLL «REFERENCED DLL» и реализовывать фактические классы в вершина абстрактных классов / интерфейсов.
Например, «Программа» ожидает, что сможет использовать класс с именем «Logger» в REFERENCED.DLL, который использует методы из класса «BackEndLogger» в BACKEND.DLL (будь то разрабатываемая или производственная версия) , Итак, в REFERENCED.DLL есть такой класс:
public abstract class BackEndLogger
{
public virtual void LogEvent(string eventToLog)
}
Тогда в обеих версиях "BACKEND.DLL" есть такой класс:
public class Logger : BackEndLogger
{
public override void LogEvent(string eventToLog)
{
... code for implementation goes here
}
}
REFERENCED.DLL будет иметь ссылку на DLL, называемую «BACKEND.DLL», и, поскольку интерфейсы классов в точности одинаковы (в значительной степени обеспечивается синхронизацией их путем реализации абстрактных классов / интерфейсов в REFERENCED.DLL ) не будет мудрее.
Надеюсь, это имело какой-то смысл =)