おそらく、interfaces.dllで定義され、プロジェクトAによって実装されたインターフェイスは変更されていませんか?たぶん、他のプロジェクトが新しいインターフェースを追加したばかりです。
ここで、昔ながらの.NETDLLのバージョン管理の問題が発生している可能性があります。プロジェクトA(A.exe?)はinterfaces.dllバージョン1.0.0.0に対してコンパイルされ、この情報はA.exeのメタデータに保存されます。interfaces.dllを1.0.0.1に更新すると、A.exeはそれを読み込めません。新しいDLLに下位互換性がある場合(キャストが機能するためには実際に必要です)、この互換性についてランタイムローダーに通知するポリシーファイルを提供できます。例えば:
<?xml version ="1.0"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="interfaces" culture="neutral" publicKeyToken="null"/>
<bindingRedirect oldVersion="1.0.0.0-1.0.0.1" newVersion="1.0.0.1"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
これは、アセンブリが1.0.0.0と1.0.0.1の間の任意のバージョンのinterfaces.dllをロードしようとする場合、バージョン1.0.0.1が受け入れ可能であることをローダーに通知します。標準パターンを使用して、DLLにちなんでこのファイルに名前を付けますpolicy.1.0.interfaces.xml
。次に、A.exeと同じディレクトリに配置します(私は思います)。
または、interfaces.dllのバージョン番号を変更していない場合(実際に変更する必要があります)、別の問題が発生している可能性があります。IDが同じであるが実際には同じアセンブリではない2つのアセンブリがある場合、ランタイムローダーがそれらの1つをロードすると、2番目のアセンブリはロードされません。詳細はありますが、これがあなたの問題になる可能性は低いと思うので、今は詳しく説明しません。