我可以在同一个Visual Studio解决方案中使用.NET 4和.NET 4.5(使用实体框架时)吗?

时间:2012-09-08 15:10:41

标签: .net .net-4.0 visual-studio-2012 .net-4.5 entity-framework-5

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

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

现在,客户端和服务器端都需要使用数据访问库,因此它只需要使用.NET 4.但是,这会导致意外问题。

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

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

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

  

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

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

我在这里做了些什么,或者这应该可以吗?

1 个答案:

答案 0 :(得分:0)

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

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