У нас есть система обработки правил, в которой каждое правило представлено классом, а все правила реализуют общий интерфейс.Иногда мы добавляем правило (класс) в сборку, но когда это правило подходит для обработки, система не может найти этот класс.Код, который мы используем для запуска правил, выглядит следующим образом.
private void runClass(string dllName, string className, string methodName, string ruleNamespace)
{
Assembly _Assemblies = Assembly.LoadFrom(dllName);
Type _Type = null;
string nameSpace = _Assemblies.ManifestModule.Name.Substring(0, _Assemblies.ManifestModule.Name.ToLower().IndexOf(".dll"));
if (ruleNamespace.Trim() != "")
nameSpace = nameSpace + "." + ruleNamespace;
_Type = _Assemblies.GetType(nameSpace + "." + className);
if (_Type == null)
throw new Exception("Cannot find class " + className + " in " + nameSpace + ".");
IRule rule = (IRule)Activator.CreateInstance(_Type);
rule.Process();
}
Я пытался очистить сборку, перестроить ее с нуля, перезагрузить, стереть библиотеки DLL вручную и перестроить, а также некоторые другие вещи, которые я не могупомни прямо сейчас.Причудливая часть в том, что в сборке может быть 50 правил и 48 из них найдены, а два - нет, а два не найденных - это только что добавленные.Кто-нибудь может подумать о том, что может вызвать это?
Обновление: я нашел фактический ответ и принял тот, который ближе всего к фактическому ответу, потому что он привел меня в правильном направлении.У нас есть две ветви кода, одна для dev и одна для QA на наших машинах разработки.applciation - это веб-сервис, и для его отладки мы должны запустить модульные тесты, подключиться к процессу aspnet_wp.exe и затем установить точки останова.Причина, по которой он не смог найти классы, заключалась в том, что машина указала на экземпляр QA веб-службы, поэтому никакие новые классы не были бы найдены;все старые были там, потому что они были развернуты в отдел QA.Спасибо за все комментарии и, в конечном итоге, привело меня к нужным местам для поиска, в конечном итоге все было связано с развернутым местоположением, но не так, как вы думаете.:)