Предположительно интерфейсы, определенные в interfaces.dll и реализованные проектом A, не изменились? Возможно, другие проекты только что добавили новые интерфейсы.
Возможно, здесь возникла старая проблема с версиями .NET DLL. Проект 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>
Это говорит загрузчику, что если сборка пытается загрузить любую версию interfaces.dll между 1.0.0.0 и 1.0.0.1, то версия 1.0.0.1 является приемлемой. Назовите этот файл после вашей DLL, используя стандартный шаблон: policy.1.0.interfaces.xml
. Затем поместите его в тот же каталог, что и ваш A.exe (я думаю.)
В качестве альтернативы, если вы не изменили номер версии interfaces.dll (что вам действительно нужно), то у вас может быть другая проблема. Если у вас есть две сборки, идентификаторы которых одинаковы, но на самом деле они не совпадают, то, как только загрузчик времени выполнения загрузит одну из них, он никогда не загрузит вторую. Есть еще детали, но, поскольку я считаю, что это вряд ли будет вашей проблемой, я не буду вдаваться в них сейчас.