Отображения интерфейса создаются во время сборки, и если «сборка A» (1 метод), используемая во время сборки, чем класс Foo
, отобразит только один метод в своей карте интерфейса.
Когда создается экземпляр класса, он будет пытаться использовать интерфейс, доступный во время выполнения (который не обязательно такой же, как тот, который используется во время компиляции, как в вашем случае), и не сможет отобразить новый второй метод.
На самом деле до C # 8 не существует хорошего способа ее решения - либо нужно понизить зависимость, чтобы его интерфейс был обратно совместим, либо перекомпилировать ваш код с новой версией зависимости.
Если ожидается, что это будет распространенной проблемой, вы можете рассмотреть возможность предоставления базового класса из «сборки A» реализациями методов по умолчанию, позволяющими добавлять методы для интерфейса и получать Foo
из этого класса вместо интерфейса.
Как отметил Ханс Пассант, C # 8 вводит стандартные методы интерфейса для решения именно этой проблемы.