2016-02-20 3 views
0

Предположим, у меня есть 2 DLL, поддерживаемые различными командами 2:Обнаружение Отсутствует Метод

Team1.dll (V1.0)

public class Foo 
{ 
    int GetValue() { return 3; } 
} 

Team2.dll (V1.0)

public class Bar 
{ 
    public int IncFooValue(Foo foo) { return foo.GetValue() + 1; } 
} 

Когда выполняются Team1.dll (v1.0) и Team2.dll (v1.0), все в порядке. Но предположим, что Team1.dll были изменены &, метод Foo.GetValue() был удален (v1.1) и упал рядом с Team2.dll (все без восстановления Team2.dll). Если выполнено, то вы получите исключение MissingMethodException.

Вопрос: Как я могу определить, не является ли Team1.dll более несовместимым с Team2.dll без их выполнения?

Например, что-то вроде:

Foreach Class in Team2.dll 
    Foreach Method in Class 
     Foreach Instruction in Method 
      If Instruction not exists in Team1.dll 
       Throw "Does not exist" 
+3

вы должны использовать семантические управление версии. Удаление методы является нарушением изменение. –

+1

Что вы ожидаете, когда они несовместимы, ошибка или изменение стратегии (резервное копирование)? – alexm

+0

@ DanielA.White: Я согласен, но это не касается нумерации версий. Просто попытайтесь определить, произошедшее без восстановления – jt000

ответ

0

Проверьте тип содержит определение метода.

 if (foo.GetType().GetMethod("GetValue") != null) 
     { 
     return foo.GetValue() + 1; 
     } 

, как другие полагают, вы можете быть лучше преследуют другую стратегия (лучше управления версиями/обратную совместимость или обработку исключений на вызывающий конце.

+0

Спасибо. Я действительно ищу более общий способ определить, совместим ли Test1.dll с Test2.dll. Например, код, который я мог бы поместить в инструмент для запуска на Test2.dll, чтобы определить, существуют ли все методы, которые существуют в Test1.dll ... – jt000

+0

Прочтите http://semver.org/ Посмотрите на идеи в что и просто получите свой код, чтобы проверить версию другой dll при запуске приложения. –

+0

Я фактически ищу техническое решение, а не полагаюсь на соглашения. Есть пара проблем с упованием на semver: 1) люди делают ошибки, 2) в крупных корпорациях номера версий иногда решаются бюрократами. – jt000

Смежные вопросы