2017-01-10 5 views
0

exeはdllを呼び出しますが、削除されたインターフェイスは明示的に使用されません。古いDLLでコンパイルされたEXEを新しい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

私はこれが問題ではないと思っていましたが、この簡単なテストを自分でやっていないと、私は考えました。私のより大きなプロジェクトの問題は、おそらく実際にIOldInterfaceを直接参照していたため、IOldInterfaceが見つかりませんでした。

関連する問題