EF6抛出错误,从不同机器的共享文件夹调用exe

时间:2014-09-09 08:28:48

标签: .net sql-server entity-framework-6

使用.Net framework 4.0,EF 6.0开发了一个exe。它适用于 .Net framework 4.0,4.5完整版安装的机器。

但是当我从不同机器的共享文件夹中调用相同的exe时,它会抛出错误。这是因为配置中的entityframework标签。

Server Machine具有安装了.Net 4.5的共享文件夹。 SharedFolder包含使用.Net 4.0开发的exe。

  • 如果用户在servermachine中打开sharedFolder的exe,则从clientmachine(已安装4.0)获取以下错误。

  • 当客户端和服务器机器具有4.5框架时,它工作正常。

  • 直接在客户端(4.0)和服务器(4.5)中打开时工作 机等。

错误

'System.Data.Entity.Internal.AppConfig' Type initializer for threw an exception 

Stack Trace:
   at System.Data.Entity.Internal.AppConfig.get_DefaultInstance()
   at System.Data.Entity.DbContext..ctor(String nameOrConnectionString)
   at ShipNet.Accounting.Data.SNACSEntities..ctor(String ConnectionString)
   at ShipNet.Accounting.Data.Repository.BaseRepository..ctor()
   at ShipNet.QnR.Presenter.frmMainPresenter.IView_GetSNAPSSystem()
   at ShipNet.QnR2.UI.frmMain..ctor(String UserName)
   at ShipNet.QnR2.UI.Program.Main(String[] args)

Inner Exception Source:
System.Configuration

.Net Framework:4.0 实体框架:6.0 数据库:sql server

我的配置文件:

 <?xml version="1.0" encoding="utf-8"?>
<configuration>

  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>

  <connectionStrings>
    <add name="ERP-DB" connectionString="Data Source=testserver;Initial Catalog=db;user Id=**;Password=**" providerName="System.Data.SqlClient" />
  </connectionStrings>

  <entityFramework>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>

  <system.data>
    <DbProviderFactories>
      <add name="EF Caching Data Provider" invariant="EFCachingProvider" description="Caching Provider Wrapper" type="EFCachingProvider.EFCachingProviderFactory, EFCachingProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=def642f226e0e59b" />
      <add name="EF Tracing Data Provider" invariant="EFTracingProvider" description="Tracing Provider Wrapper" type="EFTracingProvider.EFTracingProviderFactory, EFTracingProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=def642f226e0e59b" />
      <add name="EF Generic Provider Wrapper" invariant="EFProviderWrapper" description="Generic Provider Wrapper" type="EFProviderWrapperToolkit.EFProviderWrapperFactory, EFProviderWrapperToolkit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=def642f226e0e59b" />
    </DbProviderFactories>
  </system.data>



</configuration>

2 个答案:

答案 0 :(得分:1)

听起来问题系统上安装了Microsoft .NET Framework 4 Client Profile。在客户端PC上安装完整框架应该可以解决问题。

可以在此处找到Microsoft .NET Framework 4(完整)版本:

http://www.microsoft.com/en-us/download/details.aspx?id=17718

答案 1 :(得分:1)

还有一个解决方案,

删除下面的标签后,它有效。

  <entityFramework>
    <!--<defaultConnectionFactory type="System.Data.Entity.CrossCutting.SqlConnectionFactory, EntityFramework"/>--> 

    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
    </providers>
  </entityFramework>

伙计们,这个标签是强制性的吗?

从我的机器(.Net 4.0安装),如果我从不同机器(.Net 4.5.1安装)的共享文件夹执行exe,当exe的配置超过标签时,它会抛出错误。如果我删除上述标签,则有效。

如果我们在本地计算机(.Net 4.0)中执行相同的exe,它可以使用或不使用上面的标记。