2

我有一个包含 Web 应用程序和一些客户端代码的 Visual Studio 2012 解决方案。应用程序的结构方式,有一个用于数据访问的共享类库。

客户端代码需要以 .NET 4 为目标,因为我将把它部署到可能没有 .NET 4.5 的机器上。由于我控制 Web 服务器端,因此我可以为此假设 .NET 4.5。

现在,客户端和服务器端都需要使用数据访问库,因此它只需要使用.NET 4。但是,这给我带来了意想不到的问题。

数据访问库使用实体框架。作为 .NET 4,它使用 EF 4.4 版。但是,Web 应用程序还需要引用实体框架,并且是 .NET 4.5,它使用 EF 版本 5.0。

当我尝试运行应用程序时,这会导致(间歇性)错误。(我在同一台机器上从 VS2012 启动网站和客户端代码)。

如果我只是在浏览器的地址栏中输入一个 URL,该网站就可以正常工作 - 它能够使用数据访问库毫无问题地获取数据。但是,当我使用客户端应用程序时,它(通常,并非总是如此!)从 Web 端返回一个服务器错误,说它(Web 端)无法加载实体框架程序集:

无法加载文件或程序集 'EntityFramework, Version=5.0.0.0, ... 找到的程序集的清单定义与程序集引用不匹配。

我不确定这是否只是一个问题,因为我在调试器中运行,在同一台机器上,或者这是否会在部署后影响我的应用程序。

我在这里做了什么疯狂的事情,还是应该可以正常工作?

4

1 回答 1

0

对于尝试此操作的任何人:只要您在点击“运行”之前执行“构建解决方案”(在我的情况下以调试模式启动客户端应用程序,但在不调试的情况下启动 Web 应用程序),它就可以工作。要调试 Web 应用程序,我需要显式启动它(右键单击,调试),然后启动客户端应用程序(右键单击,调试)。同样,每次都需要“构建解决方案”(偶尔需要“重建”)。

编辑:aaaannnndd ......突然它停止工作了。但是,我发现当我在 VS 中运行客户端应用程序时,它会使用客户端应用程序使用的那个构建/更新 Web 项目 bin 目录中的 EF DLL,这会导致网站的版本不匹配被访问,因为该网站期待更高版本。为了解决这个问题,我现在有一个批处理文件,它将正确版本的 EF DLL 复制到网站 bin 目录中。所以,我可以启动客户端应用程序,然后执行我的批处理文件,然后启动网站。很痛苦,但至少它现在可以可靠地工作。

于 2012-10-29T12:00:09.577 回答