想必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>
这告诉加载器,如果程序集试图加载 1.0.0.0 和 1.0.0.1 之间的任何版本的 interfaces.dll,那么版本 1.0.0.1 是可以接受的。以您的 DLL 命名此文件,使用标准模式:policy.1.0.interfaces.xml
. 然后把它和你的 A.exe 放在同一个目录下(我想。)
或者,如果您没有更改 interfaces.dll 的版本号(您确实应该更改),那么您可能会遇到不同的问题。如果您有两个标识相同但它们实际上不是相同的程序集的程序集,那么一旦运行时加载程序加载了其中一个程序集,它将永远不会加载第二个程序集。还有更多细节,但由于我认为这不太可能是您的问题,所以我现在不会深入讨论。