2012-10-09 24 views
5

Wystąpił następujący błąd: "Nie można znaleźć lub załadować zarejestrowanego dostawcy danych .Net Framework." To występuje tylko w serwerze AppHarbor, nie moim lokalnymNie można znaleźć lub załadować zarejestrowanego .Net Framework Data Provider

używam .NET mvc4 i mysql

Dodałem MySql.Data, MySql.Data.Entity, MySql.Web odwołać i ustawić Copy Local = prawda. Ja też naciskać folderu bin do AppHarbor

To jest mój plik web.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"/> 
    </configSections> 
    <system.data> 
    <DbProviderFactories> 
     <remove invariant="MySql.Data.MySqlClient"/> 
     <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/> 
    </DbProviderFactories> 
    </system.data> 
    <connectionStrings> 
    <add name="fmcdatabaseEntities" connectionString="metadata=res://*/Models.FMCEntityDataModel.csdl|res://*/Models.FMCEntityDataModel.ssdl|res://*/Models.FMCEntityDataModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=****;uid=****;port=3306;database=****&quot;" providerName="System.Data.EntityClient"/> 
    </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"/> 
    <add key="enableSimpleMembership" value="false"/> 
    <add key="autoFormsAuthentication" value="false"/> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5"> 
     <assemblies> 
     <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     </assemblies> 
    </compilation> 
    <httpRuntime targetFramework="4.5" /> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" timeout="2880"/> 
    </authentication> 
    <membership defaultProvider="CustomMembershipProvider"> 
     <providers> 
     <clear/> 
     <add name="CustomMembershipProvider" type="FindMyCrushServer.Controllers.ControllerHelpers.CustomMembershipProvider" connectionStringName="fmcdatabaseEntities" applicationName="FindMyCrushServer" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Clear"/> 
     </providers> 
    </membership> 
    <roleManager defaultProvider="CustomRoleProvider" enabled="true" cacheRolesInCookie="false"> 
     <providers> 
     <clear/> 
     <add name="CustomRoleProvider" type="FindMyCrushServer.Controllers.ControllerHelpers.CustomRoleProvider"/> 
     </providers> 
    </roleManager> 
    <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> 
    </system.web> 
    <system.webServer> 
    <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> 
    </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> 
    </assemblyBinding> 
    </runtime> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/> 
    </entityFramework> 
</configuration> 

Każda pomoc jest naprawdę bardzo mile widziane. Z góry dziękuję

Odpowiedz

12

Czy próbowałeś używać pakietów NuGet?

... powinni upewnić się, że właściwe bity tam, gdzie są one potrzebne. Możesz użyć NuGet package restore, aby uniknąć popychania zawartości paczki do AppHarbor.

+0

Dziękuję za odpowiedź. Spróbuję tego jutro – Dranix

+0

Jesteś ratownikiem życia. – Dranix

+1

Ale nie podajesz "odpowiedzi". Dlaczego to działa? Czy to rozwiązanie działa na serwerach produkcyjnych? – SandRock

4

Właśnie zobaczyłem, że powodem tego wyjątku w moim przypadku były wersje differt między dll a wpisem konfiguracji.

Tak, czasami dll, które faktycznie masz (zainstalowane przez nuget lub w inny sposób) różni się od wpisu w węźle app.config. tej sekcji, jeśli nie w app.config, można również znaleźć pod

Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config and nearby folders.

Zmiana wersji w wejściu do wersji dll rozwiązać ten problem.

0

Dzięki, myślę fabryki dostawcy db w web.config jest poprawka

<system.data> 
    <DbProviderFactories> 
     <remove invariant="MySql.Data.MySqlClient" /> 
     <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
</system.data> 
+0

Oczywiście twój ciąg połączenia musi zawierać providerName = "MySql.Data.MySqlClient" –

1

Dla mnie, mój Nuget robi dodać niezbędnych bibliotek dll w moim projekcie/bin. Skopiowanie wszystkich brakujących plików DLL z folderu pakietu do folderu bin rozwiązuje ten problem.

Powiązane problemy