我有一个我们最近修改过的项目。该项目是用 .NET 编写的,并为 x64 机器编译。我有一个我们为与数据库交互而构建的 DataEntities 模型。但是,当我们尝试连接到实体框架模型时,会出现错误。
实体框架 edmx 文件称为 DataCentral.edmx。使用此文件,我们尝试运行以连接到我们的实例的代码非常简单。
string cs = CSManager.GetConnectionString();
DataCentralEntities ctx = new DataCentralEntities(cs);
当我们运行这两行时,它在第二行崩溃,内部异常:
Could not load file or assembly 'Interop.SHDocVw, Version=1.1.0.0,
Culture=neutral, PublicKeyToken=null' or one of its dependencies.
An attempt was made to load a program with an incorrect format.
当我们将它作为 x86 运行时(由于其他原因,从长远来看这是不可能的)它运行得很好。我确实检查了连接字符串,它的格式正确。
这是我的问题:我没有在我的任何新更改中使用 ShDocVw。事实上,在我遇到这个错误之前,我什至从未听说过它。到底是什么导致这吐在这里?我错过了什么?
更新
我们发现了一个可能是在 .NET 2.0 前后构建的表单。(可能更早。)它通过 ShDocVw 库创建了对 Web 浏览器控件(不是官方 WebBrowser 控件)的引用。显然,这是在官方控制出现之前将 Web 浏览器嵌入到您的应用程序中的一种相当常见的方式。
我们将此表单升级为使用官方 WebBrowser 控件,并删除了我们项目中对 ShDocVw.dll 的所有引用,现在一切都按预期工作,即使在 x64 中也是如此。
我仍然不明白的是,当您的项目中有对 ShDocVw.dll 的引用时,为什么实体框架会在该行崩溃。那部分对我来说毫无意义。然而,我们现在又重新站起来了。