无法加载指定的元数据资源Release vs Debug版本

我在Entity Framework中遇到了一个特殊问题,一直在困扰着我几个小时。

以下问题不是重复的,因为他们的回答对我没有帮助:

  • MetadataException:无法加载指定的元数据资源
  • 实体框架 - 无法加载指定的元数据资源
  • 无法加载指定的元数据资源
  • 我有一个aspnet core mvc应用程序( v1.1 ),它引用了作为NuGet程序包安装的Entity Framework 6.1.3.NET Framework 4.7项目(数据访问层)。

    我正在使用设计器,因此我有一个.edmx文件。
    我在运行时遇到以下异常:

    System.Data.Entity.Core.MetadataException: Unable to load the specified metadata resource.
       at System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoaderCompositeResource.LoadResources(String assemblyName, String resourceName, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)
       at System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoaderCompositeResource.CreateResourceLoader(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)
       at System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoader.Create(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)
       at System.Data.Entity.Core.Metadata.Edm.MetadataCache.SplitPaths(String paths)
       at System.Data.Entity.Core.Common.Utils.Memoizer`2.<>c__DisplayClass2.<Evaluate>b__0()
       at System.Data.Entity.Core.Common.Utils.Memoizer`2.Result.GetValue()
       at System.Data.Entity.Core.Common.Utils.Memoizer`2.Evaluate(TArg arg)
       at System.Data.Entity.Core.Metadata.Edm.MetadataCache.GetArtifactLoader(DbConnectionOptions effectiveConnectionOptions)
       at System.Data.Entity.Core.Metadata.Edm.MetadataCache.GetMetadataWorkspace(DbConnectionOptions effectiveConnectionOptions)
       at System.Data.Entity.Core.EntityClient.EntityConnection.GetMetadataWorkspace()
       at System.Data.Entity.Core.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection()
       at System.Data.Entity.Core.Objects.ObjectContext..ctor(EntityConnection connection, Boolean isConnectionConstructor, ObjectQueryExecutionPlanFactory objectQueryExecutionPlanFactory, Translator translator, ColumnMapFactory columnMapFactory)
       at System.Data.Entity.Internal.InternalConnection.CreateObjectContextFromConnectionModel()
       at System.Data.Entity.Internal.LazyInternalConnection.CreateObjectContextFromConnectionModel()
       at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
       at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
       at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
       at System.Data.Entity.Internal.Linq.InternalSet`1.GetEnumerator()
       at System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator()
       at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
       at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
       at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
    

    我有以下连接字符串:

    metadata=res://*/MyContext.csdl|res://*/MyContext.ssdl|res://*/MyContext.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=MyDatabase;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"
    

    事情是,当在Debug版本中运行时,应用程序运行时没有任何问题。 但是,在Release版本中运行时,将引发异常。 但是,如果我使用.edmx文件停用项目optimize code ,则不会抛出异常。

    我甚至查看过Entity Framework源代码。 你可以从Stacktrace看到,这个异常在170行被抛出,因为loaders.Count == 0 。 我不明白为什么资源不能在Release版本中从程序集加载,而它在Debug版本中工作。

    编辑我刚安装了反射器的试用版来检查装配。 因此,当查看使用Debug配置构建的.dll文件时,我可以清楚地看到嵌入的3个资源文件。 但是,在使用Release配置构建的程序集中,奇怪的是资源文件丢失了!

    链接地址: http://www.djcxy.com/p/38807.html

    上一篇: Unable to load the specified metadata resource Release vs Debug build

    下一篇: Unable to load the specified metadata resource