programing

'System'의 형식 이니셜라이저입니다.데이터. 엔티티.내부의.AppConfig'에서 예외를 발생시켰습니다.

muds 2023. 8. 29. 21:02
반응형

'System'의 형식 이니셜라이저입니다.데이터. 엔티티.내부의.AppConfig'에서 예외를 발생시켰습니다.

저는 MVC 4 aspnet 웹사이트에서 EF5와 함께 일하고 있습니다.로컬에서는 모든 것이 정상적으로 작동하지만 IIS에 게시하고 들어가려고 하면 오류가 발생합니다.

"'System'의 형식 이니셜라이저입니다.데이터. 엔티티.내부의.AppConfig'가 예외를 발생시켰습니다."

상세예외

엔티티 Framework: Configuration for DbContext type 'GdpSoftware'에 대한 구성 섹션 핸들러를 만드는 동안 오류가 발생했습니다.서버.Data.GdpSoftwareDbContext, GdpSoftware.서버.'데이터'가 응용 프로그램 구성에서 여러 번 지정되었습니다.각 컨텍스트는 한 번만 구성할 수 있습니다. (E:\App\web.config 행 104)

StackOverflow에서 이전 질문을 확인했고, 이미 Nuget EntityFramework를 통해 제거 및 재설치하여 각 프로젝트에서 해당 질문에 대한 각 참조가 EF5임을 확인했습니다.각 프로젝트에서 선택한 프레임워크가 4.5인 것도 확인했습니다.

뭐가 문제의 원인일까요?감사합니다!기예르모

web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <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>
  <connectionStrings>
    <add name="GdpSoftwareConnectionString" connectionString="Persist Security Info=False;User ID=user;Password=password;Initial Catalog=databasename;Data Source=server" providerName="System.Data.SqlClient" />
    <add name="GdpSoftware.Server.Data.GdpSoftwareDbContext" connectionString="GdpSoftware.Server.Data.GdpSoftwareDbContext_ConnectionString" providerName="System.Data.SqlClient"/>
    <add name="GdpSoftware.Server.Ui.Web.Models.UsersContext" connectionString="GdpSoftware.Server.Ui.Web.Models.UsersContext_ConnectionString" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
    <!-- BEGIN - TO SEE THE ERRORS ON THE DEPLOYMENT-->
    <customErrors mode="Off" />
    <!-- END - TO SEE THE ERRORS ON THE DEPLOYMENT-->
  </system.web>
  <system.webServer>
    <!-- BEGIN - TO SEE THE ERRORS ON THE DEPLOYMENT-->
    <httpErrors errorMode="Detailed" />
    <asp scriptErrorSentToBrowser="true" />
    <!-- END - TO SEE THE ERRORS ON THE DEPLOYMENT-->
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <staticContent>
      <mimeMap fileExtension=".mustache" mimeType="text/plain" />
    </staticContent>
    <security>
      <requestFiltering>
        <fileExtensions>
          <add fileExtension=".mustache" allowed="true" />
        </fileExtensions>
      </requestFiltering>
    </security>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Castle.Windsor" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="3.2.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="3.2.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <contexts>
      <context type="GdpSoftware.Server.Data.GdpSoftwareDbContext, GdpSoftware.Server.Data" disableDatabaseInitialization="true">
        <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[GdpSoftware.Server.Data.GdpSoftwareDbContext, GdpSoftware.Server.Data], [GdpSoftware.Server.Data.Migrations.Configuration, GdpSoftware.Server.Data]], EntityFramework" />
      </context>
    </contexts>
  </entityFramework>
</configuration>

App.config 파일에서 다음을 수행합니다.

  1. 집어넣어요connectionStrings는 소는다있습다니 .configSections요소
  2. 집어넣어요startup 뒤의 connectionStrings요소
<?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>

기본적으로 ConnectionFactory를 기본값이 아닌 SqlConnectionFactory로 변경해야 했습니다.

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
    <parameters>
      <parameter value="<My Connection String>" />
    </parameters>
  </defaultConnectionFactory>
</entityFramework>

http://blogs.msdn.com/b/davidobando/archive/2012/08/14/changing-ef-s-default-provider-from-localdb-to-sql-server.aspx

Entity Framework에 대한 참조를 제거하고 NuGet에서 최신 버전의 Entity Framework를 설치하면 문제가 해결된다는 것을 알게 되었습니다.설치 중에 필요한 모든 항목을 다시 만듭니다.

저는 이 문제로 머리가 깨졌고, 마침내 저에게 효과가 있었던 것은 다음과 같습니다.

1단계 : Nuget 패키지 관리자를 사용하여 엔티티 프레임워크 제거

2단계: App.config에서 엔티티 프레임워크 요소 삭제

3단계: 원하는 버전의 엔터티 프레임워크를 다시 설치합니다.

4단계: 마이그레이션 테이블 및 마이그레이션 폴더를 삭제합니다.

5단계: 마이그레이션 사용 및 마이그레이션 및 업데이트 데이터베이스 추가

나는 여러 명이 있었습니다.providers가 내 web.config에 지정되었습니다.

 <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>

저는 그것들 중 하나를 제거했고 그것은 작동했습니다.

TSQL이 아닌 MySQL을 사용하고 있습니다.

저도 같은 문제에 직면했지만, 제 경우 제 솔루션에는 주로 데이터베이스와 상호 작용하는 콘솔 애플리케이션과 EF 클래스 라이브러리가 있습니다.콘솔 응용 프로그램 구성에서 EF와 관련된 구성 설정을 제거했습니다.EF 클래스 라이브러리에서 다음 구성 설정을 한 곳에서만 유지했습니다.

이것은 저에게 효과가 있었습니다.


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

<add name="EntityModel" connectionString="Server=Localhost\SQLEXPRESS;Database=SampleEntities;Trusted_Connection=True;" providerName="System.Data.EntityClient" />


Connections.config 파일을 "항상 복사"로 설정하는 것을 잊어버렸을 때 이 문제가 발생했습니다.

BareMessage = "configSource 파일 'Connections.config'를 열 수 없습니다."

아래 코드에 따라 웹.config에서 이 부분을 변경합니다. (이것을 시도해 보세요, 제게 효과가 있습니다.)

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="Data Source=.; Integrated Security=True; MultipleActiveResultSets=True" />   
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>

나의 경우에는

<section name="entityFramework"

버전 4에서 6으로 업데이트해야 합니다.프로젝트가 EntityFramework 4에서 6으로 업데이트되었지만 web.config가 업데이트되지 않았습니다.

문제는 다음과 같습니다.

<context type="GdpSoftware.Server.Data.GdpSoftwareDbContext, GdpSoftware.Server.Data" disableDatabaseInitialization="true">

왜 이런 방법을 사용하는지, 어떻게 작동하는지 모르겠습니다.

web.config에서 꺼내서 다른 방법으로 가는 것이 더 나을 수 있습니다.

app.config에 대한 구성 파일을 하나 더 유지하는 경우 부모 페이지에 키를 포함하지 마십시오.

상위 페이지 : app.config

<appSettings configSource="appSettings.config">
    <add key="ClientSettings" value="venice" /> <!-- Don't add Key Here -->
</appSettings>

하위 페이지 : appSettings.config

<appSettings>
  <add key="ClientSettings" value="venice"/> <!-- add Here -->
</appSettings>

저도 같은 문제가 있었어요.하루 후에, 저는 그것을 얻었습니다.

문제는 두 개를 추가하는 것에서 발생했습니다.smtpmailSettings<system.net>.

에서에서 .web.config또는App.Config프로젝트에 사용되지 않는 태그가 있거나 참조에 없는 경우.

오늘 다른 MVC 응용 프로그램에서 가상 폴더로 실행되는 중첩된 MVC 응용 프로그램에서 이 오류가 발생했습니다.저의 경우 Inner Exception이 메인 Exception보다 더 유용했습니다.그것은 다음과 같이 말하고 있었습니다.

- The entry 'DbContextMain' has already been added. (C:\inetpub\...\web.config line x)

중첩된 앱에서 중복 연결 문자열을 수정한 후 모든 것이 정상적으로 작동했습니다.

ASP를 사용하는 경우.NET과 IIS Express는 "C:\사용자\\문서\IIExpress\config\applicationhost.config"에서 프로젝트를 검색하고 잘못된 virtualDirectory 항목이 있는지 확인합니다.

비슷한 문제에 직면했는데 defaultConnectionFactory를 SqlConnectionFactory로 변경하는 것이 해결에 도움이 되었습니다.

실제 오류 발생 메시지 =web.config에 인식할 수 없는 요소 'providers'가 있으므로 web.config 파일에서 providers 섹션을 제거합니다.

일반적인 문제는 컴퓨터/웹/앱 구성과 관련된 모든 문제입니다.

Machine에서 동일한 연결 문자열을 사용했습니다.내 앱과 같이 구성합니다.앱에서 첫 번째 연결 문자열 앞에 놓도록 구성합니다.구성

Nuget Packages에서 다른 버전의 EntityFramework를 가지고 놀 때 이 이상한 오류가 발생합니다.

먼저 NuGet 패키지에서 Entity Framework DLL을 제거한 다음 app.config를 정리합니다.configSections 및 엔티티 프레임워크 요소에서 항목을 제거합니다.

그런 다음 원하는 버전을 설치합니다.이것으로 문제가 해결될 것입니다.

연결 문자열에서 첫 번째 문자열은 web.config의 기본입니다.

SchedulingContext는 엔티티 파일의 기본 매개 변수입니다.

<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"/>

나의 경우 추가<clear />바로 뒤에<connectionStrings>매력적으로 작동한

WCF 서비스에서 연결 문자열에 대한 중복 정의가 있었습니다.서비스를 디버그하고 내부 오류 메시지(기본값으로 표시되지 않음)를 확인할 수 있었습니다.

ConfigurationErrorsException: The entry 'xxxEntities' has 
already been added. (C:\Users\WcfService\web.config line 35). 

web.config 변환 후의 값(중복값 참고).

<connectionStrings>
    <add name="xxxEntities" connectionString="metadata=res://*/ ...
    <add name="xxxEntities" connectionString="metadata=res://*/ ...

따라서 불필요한 연결 문자열을 제거하여 문제를 해결했습니다.

파일 machine.config의 system.data 섹션에서 DbproviderFactory를 제거한 후 이 문제를 해결했습니다. fbclient.dll을 설치할 때 데이터가 더러웠습니다.

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config

  <system.data>
    <!-- <DbProviderFactories><add name="FirebirdClient Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".NET Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=4.10.0.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c"/><add name="FirebirdClient Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".NET Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=6.4.0.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c"/> -->
  </system.data>

오래된 질문이지만 다른 답변에 언급된 다른 이유로 인해 저는 제 연구 결과를 공유하려고 생각했습니다.

저의 경우, 문제는 app.config에서 연결 문자열 항목을 어떻게 정의했는지였습니다.에서 직접 편집했습니다.Notepad++그리고 제가 바로 가기를 누르고, 제가 발견하지 못한 전체 문자열을 최소화한 것이 틀림없습니다. 그리고 이 오류가 발생하기 시작했습니다.저는 이렇게 정의되었습니다.

<add name="MyDb" connectionstring="data source=MyServer;
 initial catalog=MyDatabase;integrated security=true" 
 providername="System.Data.SqlClient" />

두 번째로 다음 매개 변수를 변경했습니다.

connectionstring to connectionString

그리고.

providername to providerName

참고: Visual Studio에서 문제가 즉시 강조되었지만 클라이언트 사이트에서는 이 문제가 이상적이지 않습니다!

프로젝트 CMS에 연결 문자열의 중복 정의가 있었습니다.컨텍스트 클래스의 이름은 다음과 같습니다.CmsContext

저의 경우, Web.config의 연결 스팅을 다음과 같이 변경했기 때문에 문제가 해결되었습니다. 첫 번째 이름은 CmsContext이고 메인 프로젝트와 관련이 있습니다. 두 번째 이름은 DefaultConnection이고 ID와 관련이 있습니다.

<add name="CmsContext" providerName="System.Data.SqlClient" connectionString="Data Source=DESKTOP-2NQSP1P\SQLEXPRESS;  Initial Catalog=CmsDB;Integrated Security=True;" />
</connectionStrings>

1단계: 패키지 엔티티 프레임워크 제거:이 명령은 프로젝트에서 기존 엔터티 관리자 제거

2단계: 패키지 엔티티 프레임워크 제거:이 명령은 프로젝트에 최신 버전을 설치합니다.

마지막으로 프로젝트를 재구축하면 효과적입니다.

저는 bin 폴더를 삭제하고 솔루션을 재구축한 후 생성된 bin 폴더를 프로젝트에 다시 포함시켰습니다.내 코드가 작동하기 시작했습니다.

C:\inetpub\wwroot 내부의 C-드라이브를 확인하고 불필요한 폴더를 모두 제거합니다. 그렇지 않으면 IIS에서 불필요한 호스트 파일 또는 폴더를 제거합니다.

언급URL : https://stackoverflow.com/questions/17585611/the-type-initializer-for-system-data-entity-internal-appconfig-threw-an-except

반응형