实体框架类型初始化程序异常

时间:2013-04-17 13:10:29

标签: c# entity-framework visual-studio-2012

我有一个实体框架项目在我的机器上工作正常,但从网络运行时会出现问题。最近对项目的更改包括添加Dynamic Linq dll(System.Linq.Dynamic)

当我从网络调试时,VS报告:The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception

内部异常是:“无法加载文件或程序集'EntityFramework,Version = 4.4.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)“:”EntityFramework,Version = 4.4.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089“}

我尝试过常用的技巧:从项目的根目录中删除packages目录,从包管理器控制台卸载并重新安装,但无济于事。

我的app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="LGFinance.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <connectionStrings>
    <add name="LGFinanceEntities" connectionString="metadata=res://*/Model.LGFinanceContext.csdl|res://*/Model.LGFinanceContext.ssdl|res://*/Model.LGFinanceContext.msl;provider=System.Data.SqlClient; provider connection string='data source=lightning;initial catalog=DLGDB;Integrated Security=true;Password=******;multipleactiveresultsets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <applicationSettings>
    <LGFinance.Properties.Settings>
      <setting name="Setting" serializeAs="String">
        <value />
      </setting>
    </LGFinance.Properties.Settings>
  </applicationSettings>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Windows.Interactivity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

有人可以指出我做错了吗?

3 个答案:

答案 0 :(得分:20)

您的App.config文件列出了Entity Framework 5.0,您的代码中的某些项目仍然保留在EF 4.4上,并期望在App.config文件中找到它。

以下是最有可能发生的事情:您在使用.NET 4.0构建的项目上安装了EF 5.0,这使得EF 4.4的版本而不是5.0(因为5.0仅适用于.NET 4.5)。如果您稍后尝试将项目升级到.NET 4.5,那么您将在该项目上使用EF 4.4。这将要求您再次在该项目上重新安装EF以获得对EF 5.0的正确引用。

给它一个镜头,让我知道它是否有效。

答案 1 :(得分:10)

所有项目必须首先安装正确版本的EF,然后在App.config文件中检查以下内容,

  1. 确保 connectionStrings 元素位于 configSections 元素之后。
  2. 确保启动元素位于 connectionStrings 元素之后。
  3.   

    <?xml version="1.0" encoding="utf-8"?>
     <configuration>
       <configSections>
             <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
       </configSections>
       <connectionStrings>
             <add name="SchedulingContext" connectionString="Data Source=XXX\SQL2008R2DEV;Initial Catalog=YYY;Persist Security Info=True;User ID=sa;Password=XXX"   providerName="System.Data.SqlClient"/>
       </connectionStrings>
       <startup>
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
      </startup>       
     </configuration>
    

答案 2 :(得分:0)

我可以修复此问题安装:Visual Studio 2012的实体框架6工具&amp; 2013年 - http://www.microsoft.com/en-gb/download/confirmation.aspx?id=40762

此致 AM