EntityFramework错误:提供程序未返回ProviderManifest实例

时间:2014-10-24 15:53:07

标签: c# entity-framework asp.net-mvc-4 visual-studio-2012

我的项目是使用ASP.NET MVC4,在C#中使用Visual Studio 2012 for Web Express。

编译项目时,出现以下错误:

  

提供程序未返回ProviderManifest实例。无法确定存储版本;需要有效的存储连接或版本提示。

经过数小时的搜索后,我认为错误与实体框架有某种关系。我还在这里找到了解决此错误的方法: http://forums.devart.com/viewtopic.php?f=32&t=25748

解决方法建议我在ProviderManifestToken="2012"文件中将字段ProviderManifestToken="2008"更改为.edmx

这样做之后,错误消失了。但是当我运行项目时出现另一个问题,即运行时错误:

  

无法加载文件或程序集“Microsoft.Data.Edm”或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

     

===预绑定状态信息===
  日志:DisplayName = Microsoft.Data.Edm
  (部分)
  警告:为组件提供了部分绑定信息:
  警告:程序集名称:Microsoft.Data.Edm |域名ID:2
  警告:仅提供部分装配显示名称时发生部分绑定   警告:这可能导致装订器加载错误的装配   警告:建议为装配提供完全指定的文本标识,
  警告:它由简单的名称,版本,文化和公钥令牌组成   警告:有关此问题的更多信息和常见解决方案,请参阅白皮书http://go.microsoft.com/fwlink/?LinkId=109270   日志:Appbase = file:/// C:/ Users / Pedro / Documents / Visual Studio 2012 / Projects / Dockis / Development / Dockis / Dockis /
  日志:初始PrivatePath = C:\ Users \ Pedro \ Documents \ Visual Studio 2012 \ Projects \ Dockis \ Development \ Dockis \ Dockis \ bin
  调用程序集:(未知)。

     

日志:此绑定在默认加载上下文中启动   日志:使用应用程序配置文件:C:\ Users \ Pedro \ Documents \ Visual Studio 2012 \ Projects \ Dockis \ Development \ Dockis \ Dockis \ web.config
  日志:使用主机配置文件:C:\ Users \ Pedro \ Documents \ IISExpress \ config \ aspnet.config
  日志:使用C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config中的计算机配置文件。

     

日志:此时策略未应用于引用(私有,自定义,部分或基于位置的程序集绑定)。
  日志:尝试下载新的URL文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / vs / 78aa89a1 / af9f01eb / Microsoft.Data.Edm.DLL。
  日志:尝试下载新的URL文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / vs / 78aa89a1 / af9f01eb /Microsoft.Data.Edm/Microsoft.Data.Edm .DLL。
  日志:尝试下载新的URL文件:/// C:/ Users / Pedro / Documents / Visual Studio 2012 / Projects / Dockis / Development / Dockis / Dockis / bin / Microsoft.Data.Edm.DLL。
  日志:使用应用程序配置文件:C:\ Users \ Pedro \ Documents \ Visual Studio 2012 \ Projects \ Dockis \ Development \ Dockis \ Dockis \ web.config
  日志:使用主机配置文件:C:\ Users \ Pedro \ Documents \ IISExpress \ config \ aspnet.config
  日志:使用C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config中的计算机配置文件。
  日志:在应用程序配置文件中找到重定向:5.6.0.0重定向到5.6.1.0   日志:政策后参考:Microsoft.Data.Edm,Version = 5.6.1.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35
  日志:尝试下载新的URL文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / vs / 78aa89a1 / af9f01eb / Microsoft.Data.Edm.DLL。
  日志:尝试下载新的URL文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / vs / 78aa89a1 / af9f01eb /Microsoft.Data.Edm/Microsoft.Data.Edm .DLL。
  日志:尝试下载新的URL文件:/// C:/ Users / Pedro / Documents / Visual Studio 2012 / Projects / Dockis / Development / Dockis / Dockis / bin / Microsoft.Data.Edm.DLL。
  警告:比较程序集名称导致不匹配:内部编号
  错误:无法完成程序集的设置(hr = 0x80131040)。探测终止。

堆栈追踪:

[FileLoadException: Could not load file or assembly 'Microsoft.Data.Edm' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)]

[FileLoadException: Could not load file or assembly 'Microsoft.Data.Edm, Version=5.6.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)]
   System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
   System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +34
   System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +152
   System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection) +77
   System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +16
   System.Reflection.Assembly.Load(String assemblyString) +28
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +38

[ConfigurationErrorsException: Could not load file or assembly 'Microsoft.Data.Edm, Version=5.6.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)]
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +752
   System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +218
   System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +130
   System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +170
   System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +91
   System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded) +285
   System.Web.Compilation.BuildManager.ExecutePreAppStart() +153
   System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +521

[HttpException (0x80004005): Could not load file or assembly 'Microsoft.Data.Edm, Version=5.6.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9950728
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +254

Dockis是项目的名称。看到这个错误后,我花了几个小时相信错误在所使用的软件包版本中的某处。但是,情况似乎并非如此,因为大多数软件包都是最新的,并且它们之间似乎没有任何冲突。

因此,我重新认为问题在于EntityFramework的版本,但我对如何解决这个问题缺乏想法。

我很满意,如果你有任何建议,我会很感激他们。

8 个答案:

答案 0 :(得分:15)

下载http://www.microsoft.com/en-us/download/details.aspx?id=40762并将Nuget EF更新为6.1.3,一切正常。

答案 1 :(得分:7)

显然,问题是我正在使用的Visual Studio版本。如果你问我,请大笑。删除Visual Studio Web Express 2012并安装Visual Studio 2013 Ultimate后,一切都开始正常工作。

答案 2 :(得分:3)

在.edmx文件中的ProviderManifestToken="2012"中替换2012与2008年对我有用。

  1. ProviderManifestToken="2012"
  2. 中将2012替换为2008
  3. 保存.edmx文件
  4. 清理并重建解决方案

答案 3 :(得分:2)

这对我有用,而不会在.edmx文件中将ProviderManifestToken =“2012”更改为2008。

在.edmx文件中,我将以下值从True更改为False。

<edmx:DesignerProperty Name="UseLegacyProvider" Value="False" /> 

“提供程序未返回ProviderManifest实例。”错误消失了。

答案 4 :(得分:2)

这是因为VS2012不支持sql 2012及更高版本。 将ProviderManifestToken的值更改为2008

答案 5 :(得分:1)

不确定它是否是Visual Studio问题。或者只是实体框架无法正确识别提供者清单。 我通过编辑edmx文件并将2012替换为2008

中的<Schema ProviderManifestToken="2008" ...>来消除错误

答案 6 :(得分:0)

  1. 转到项目所在的位置(打开解决方案资源管理器。右边 单击解决方案并单击&#34;在文件资源管理器中打开文件夹&#34;
  2. 用记事本打开EDMX文件并进行更改     ProviderManifestToken =&#34; 2012&#34;到ProviderManifestToken =&#34; 2008&#34;。保存     它

  3. 构建您的解决方案

答案 7 :(得分:0)

对我来说,这是因为当我使用TeamCity来删除我的网站时,它改变了web.config文件。

删除了connectionString,并将debug = true添加到System.Web编译

<system.web>
    <customErrors mode="Off" />
    <authentication mode="None" />
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" maxRequestLength="1048576" />
    <httpModules>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
    </httpModules>
  </system.web>

我manuel修复了web.config文件,它现在又适用于我。