在EntityFramework.dll中发生未处理的“System.TypeInitializationException”typesexception
我正在尝试使用本教程学习entity framework和SQLite 。 但是,我得到一个错误。
抛出的错误是:
在EntityFramework.dll中发生未处理的“System.TypeInitializationException”typesexception
其他信息:“System.Data.Entity.Internal.AppConfig”的types初始值设定项引发exception。
这是完整的错误跟踪:
System.TypeInitializationException: The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception. ---> System.Configuration.Configuration ErrorsException: Configuration system failed to initialize ---> System.Configuration.ConfigurationErrorsException: Only one <configSections> element allowed per config file and if present must be the first child of the root <configuration> element. (C:\Users\Ankur\Documents\Visual Studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.vshost.exe.config line 11) at System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean ignoreLocal) at System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(ConfigurationSchemaErrors schemaErrors) at System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors() at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey) --- End of inner exception stack trace --- at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey) at System.Configuration.ClientConfigurationSystem.PrepareClientConfigSystem(String sectionName) at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName) at System.Configuration.ConfigurationManager.get_ConnectionStrings() at System.Data.Entity.Internal.AppConfig..ctor() at System.Data.Entity.Internal.AppConfig..cctor() --- End of inner exception stack trace --- at System.Data.Entity.Internal.AppConfig.get_DefaultInstance() at System.Data.Entity.Internal.LazyInternalConnection..ctor(String nameOrConnectionString) at System.Data.Entity.DbContext..ctor() at ConsoleApplication1.ChinookContext..ctor() at ConsoleApplication1.Program.Main(String[] args) in c:\Users\Ankur\Documents\Visual Studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs :line 16
这里是C#代码:
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { using (var context = new ChinookContext()) //error comes on this line { } } } class ChinookContext : DbContext { } }
这里是文件App.config :
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.data> <DbProviderFactories> <add name="SQLite Data Provider" invariant="System.Data.SQLite" description="Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /> </DbProviderFactories> </system.data> <connectionStrings> <add name="ChinookContext" connectionString="Data Source=|DataDirectory|Chinook_Sqlite_AutoIncrementPKs.sqlite" providerName="System.Data.SQLite" /> </connectionStrings> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0" /> </parameters> </defaultConnectionFactory> </entityFramework> </configuration>
这里是文件packages.config :
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="EntityFramework" version="5.0.0" targetFramework="net45" /> <package id="System.Data.SQLite.x86" version="1.0.86.0" targetFramework="net45" /> </packages>
阅读信息:
每个configuration文件只允许有一个
<configSections>
元素,如果存在,则必须是根<configuration>
元素的第一个子元素。
将configSections元素移到顶部 – 刚刚位于system.data当前位置的上方。
检查您的参考文件中包含的entity framework参考版本,并确保它与Web.config
文件中的configSections
节点相匹配。 在我的情况下,它指向我的configSections版本5.0.0.0和我的参考是6.0.0.0。 我只是改变它,它的工作…
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
只需从Main
文件夹中进入Web.Config
,而不是在Views
文件夹中:
configSections
section name="entityFramework" type="System.Data. .....,Version=" <strong>5</strong>.0.0.0"..
<..>
调整你已经安装的EntityFramework的版本,例如。 像版本6.0.0.0“
检查您的项目中是否引用了正确的版本。 例如,它所抱怨的DLL,可能来自旧版本,这就是为什么可能有版本不匹配。
在静态类中,如果您从xml或reg获取信息,则类尝试初始化所有属性。 因此,你应该控制,如果configurationvariables是否存在,否则属性将不会初始化,因此类。
检查xml参考variables是否存在,检查reg referancevariables是否存在,如果不存在,请确保您处理。