2013-10-17 3 views
4

PostgresSQL 및 Entity 프레임 워크를 사용하여 WebAPI로 ASP.NET 4.5를 구성하려고합니다. Postgres 드라이버 Npgsql의 두 가지 빌드가 있음을 발견했습니다. 버전 2.0.12.0은 EF 5.0.0.0을 지원합니다. EF 6.0.0.0을 지원하는 별도의 빌드 (2.0.13.91로 잘못 표시된 문서에 따른)가 있습니다. 나는 내가 제대로 작동하도록 하나를 얻을 수있는 한 내가 사용하는 버전을 신경 쓰지 않는다. EF 6.0.0.0을 사용하려고 할 때 오류가 발생하고 현재 5.0.0.0이 작동하려고합니다. 6.0.0.0의 오류는 별도의 문제이므로 필요한 경우 별도로 게시 할 예정입니다.EntityFramework 6.0.0.0 5.0.0.0 되돌리기

문제는 이미 EF 6.0.0.0을 한 번에 설치했기 때문에 EF 5.0.0.0으로 완전히 다운 그레이드 할 수 없다는 것이 문제입니다. 내가 찾을 수있는 모든 참조를 복귀하고 난 단지 EF 5.0.0.0이 설치되어있는,하지만 난 웹 API 응용 프로그램을 배포하거나 Npgsql 드라이버를 사용하는 코드를 실행하려고 할 때 내가 얻을 :

A first chance exception of type 'System.IO.FileLoadException' occurred in System.Data.Entity.dll 
A first chance exception of type 'System.IO.FileLoadException' occurred in EntityFramework.dll 
iisexpress.exe Error: 0 : Operation=ReflectedHttpActionDescriptor.ExecuteAsync, Exception=System.IO.FileLoadException: Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 
File name: 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 
    at Npgsql.NpgsqlFactory.GetService(Type serviceType) 
    at System.Data.Common.DbProviderServices.GetProviderServices(DbProviderFactory factory) 

I 돈 6.0.0.0의 사양이 어디에서 왔는지 알 수 없습니다. web.config에서 모든 버전 사양을 업데이트했습니다. 5.0.0.0을 제거하고 다시 설치했습니다. 심지어 MVC4 용 Visual Studio 업데이트 패키지를 제거하고 다시 설치했습니다. Nuget에 나열된 EntityFramework 패키지는 5.0.0.0입니다. 패키지의 참조 된 어셈블리는 모두 EF 5.0.0.0을 지정합니다. Npgsql을 다시 작성하고 Npgsql.dllMono.Security.dllgacutil.exe으로 등록했습니다. 무엇이 6.0.0.0을 가리키며 어떻게 되돌릴 수 있습니까?

TL; DR

찾아낸 조립체 5.0.0.0이며 정확하다. 어떤 이유로 6.0.0.0을 찾고 있는데 그 이유를 알 수 없습니다.

답변

1

동일한 문제가 있었지만 다행스럽게도 실수로 EF6으로 업그레이드 (및 후속 다운 그레이드)하기 전에 다른 서버에 테스트 버전을 배포했습니다. 그래서, 그 서버에서 설정 파일을 가져 와서 문제를 일으키는 설정을 덮어 쓸 수있었습니다. 일단 작동 시키면 서버에서 로컬로 가져온 버전으로 버전을 비교하고 서버에없는 내 컴퓨터에 공급자 섹션이 있음을 알 수 있습니다 (아래 참조). 일단 제거되면, 그것은 나를 위해 일했습니다. 완전한 정리를 수행하지 않는 다운 그레이드의 경우 일지 확실하지 않습니다.

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 

    <!-- This providers section appeared after the accidental upgrade to EF6 once it was removed, application no longer expected EF6 dlls --> 
    <providers> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
</entityFramework> 

저는 배포 중간에 있습니다. 따라서이 답변에 대한 사과는 일화 일뿐입니다. 희망이 당신을 위해 작동합니다!

+0

감사합니다. 불행히도 더 이상 구성을 사용하지 않고 더 이상 문제가 발생하지 않아 테스트 할 수 없으며 이전 구성을 되돌리고 테스트 할 시간이 없습니다. 나는 당신이 정확하고 다운 그레이드가 완전한 정리를 수행하지 않거나 PostGre 드라이버에서 오류/비 호환성이 될 수 있다고 생각합니다. 좋은 발견! 나는 이것이 매우 드문 경우라고 생각했다. 다행스럽게도 이것은 어느 시점에 박스에서 풀려나 간다. – taz

+0

또한 .NET의'machine.config'에는'web.config'와 같은 방식으로 작동하는 유사한 "provider"섹션과 비슷한 것들이 포함되어 있지 않으며 런타임의 상위 범위에서 적용됩니까? 누락 된 제공자 섹션이 이전 5.0.0.0 설치에서'machine.config' (또는 다른 유사한 처리 된 configs/파일이있는 경우)에 실제로 존재하는지 확인하는 것이 좋습니다. – taz

관련 문제