使用.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>
答案 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,它可以使用或不使用上面的标记。