2017-01-10 3 views
0

exe ​​вызывает в dll, но явно не использует удаленный интерфейс. Почему нельзя запускать EXE с старой DLL во время выполнения с новой DLL?Удаление интерфейса типа прерывает использование exe dll (.NET)

Компилятор должен хранить дополнительную информацию о типах, а не просто о том, что используется.

EXE

void main() 
{ 
    new Foo().PrintHello(); 
} 

Старый DLL:

public class Foo : IOldInterface 
{ 
    public void PrintHello() 
    { 
     Console.WriteLine("Hello"); 
    } 
    public int Something { get { return 123; } } 
} 

public interface IOldInterface 
{ 
    int Something { get; } 
} 

Новая DLL

public class Foo 
{ 
    public void PrintHello() 
    { 
     Console.WriteLine("Hello"); 
    } 
} 
+0

Я не могу воспроизвести проблему с кодом, который вы предоставили, но тот факт, что мне пришлось изменить его даже для его компиляции, предполагает, что вы, вероятно, тоже не тестировали этот код. Пожалуйста, предоставьте [mcve], который фактически демонстрирует проблему. –

+0

Извините. Ты прав. Я экстраполировал с гораздо большей базы кода и не компилировал это. Обновлено сообщение, прежде чем эффективно отказаться от этой проблемы. – aitee

ответ

0

Короткий в том, что просто удаление интерфейса от типа не делает его несовместимым с использованием другой библиотеки (пока прототип метода не изменяется, а также следующие причины: https://stackoverflow.com/a/806510/578879)

Я думал, что это не может быть проблемой, но поставил вопрос, не выполняя этот простой тест самостоятельно. Проблема в моем более крупном проекте, скорее всего, связана с проблемой сборки (как-то с более старой версией exe, которая фактически ссылалась на IOldInterface напрямую - следовательно, исключение IOldInterface не найдено).