[Mono-list] EF crashing in AssemblyName.ReferenceMatchesDefinition with is not implemented exception

Abe Gillespie abe.gillespie at gmail.com
Tue Aug 27 12:25:24 UTC 2013


I know this isn't a particularly great option, but if this is a big
roadblock for you, you can always change the EF source and work-around the
issue with your own private version of EF. It should be pretty easy to
locate the offending code.

http://entityframework.codeplex.com/

On Monday, August 26, 2013, mlgo wrote:

> Has anyone figured this out yet?. Either this is going to have to be
> implemented or the Entity Framwork needs to avoid calling it. There is a
> stacktrace at the bottom of this message.
>
> System.Reflection.AssemblyName.ReferenceMatchesDefinition is not
> implemented. I guess developers have been working around this by comparing
> the assembly fullnames. Since it is called directly by EntityFramework it
> has to be implemented now. Unless EF should be changed to avoid this call.
> This is something I have not researched either. If anyone would think that
> EntityFramework should be changed to avoid making this call please add some
> feedback.
>
> Has anyone done this implementation or are they working on it currently?. I
> don't see any posts or bugs relating to it but I did find one reference to
> the problem in the context of another product using mono.
> Does the mono team plan to or want to implement it?
>
>
> I have done some research on this method in dotnet. The implementation for
> windows as documented by MSDN in this simple way "The comparison depends
> only on the simple assembly name. It ignores version, culture, and public
> key token. ".
>
> At a more fundamentally level the purpose of this method is to determine if
> the 2 names resolve to the same assembly. I believe that the documentation
> in dotnet used to read that way and referred to the loader. I suspect that
> dotnet is still doing that as part of the implementation of this function.
> If that approach were taken I'm not yet sure if it requires making windows
> OS calls to do it or if it could be done with managed code. The point is if
> it does need to be done and it needs to call os api's then the
> implementation would need to be different for Linux. If it is called often.
> If it involves loading an assembly using both of the names and then
> determining whether it is the same assembly that seems slow and
> inefficient.
> I have not done any performance profiling on this call to find out often it
> gets called.
> I think I would want to cache the assemblies. Also memoize the assembly
> names and their results. This would speed things up considerably.
>
>
>
> I'm concerned this will need to be implemented differently on Linux?? Hence
> it will have multiple implementations.
>
> Now that EF6 is in and people are using this becomes an immediate problem
> as
> it binds directly to the unimplemented function
> AssemblyName.ReferenceMatchesDefinition. Here is the stack:
>
>
>
> System.NotImplementedException: The requested feature is not implemented.
>
>   at System.Reflection.AssemblyName.ReferenceMatchesDefinition
> (System.Reflection.AssemblyName reference, System.Reflection.AssemblyName
> definition) [0x0003a] in
>
> C:\cygwin\sources\mono\mcs\class\corlib\System.Reflection\AssemblyName.cs:328
>
>   at
>
> System.Data.Entity.Core.Metadata.Edm.DefaultAssemblyResolver.ResolveAssembly
> (System.Reflection.AssemblyName referenceName) [0x00019] in
>
> C:\cygwin\sources\mono\external\entityframework\src\EntityFramework\Core\Metadata\Edm\DefaultAssemblyResolver.cs:30
>
>   at
>
> System.Data.Entity.Core.Metadata.Edm.DefaultAssemblyResolver.TryResolveAssemblyReference
> (System.Reflection.AssemblyName refernceName, System.Reflection.Assembly&
> assembly) [0x00000] in
>
> C:\cygwin\sources\mono\external\entityframework\src\EntityFramework\Core\Metadata\Edm\DefaultAssemblyResolver.cs:14
>
>   at
>
> System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoaderCompositeResource.ResolveAssemblyName
> (System.String assemblyName,
> System.Data.Entity.Core.Metadata.Edm.MetadataArtifactAssemblyResolver
> resolver) [0x00007] in
>
> C:\cygwin\sources\mono\external\entityframework\src\EntityFramework\Core\Metadata\Edm\MetadataArtifactLoaderCompositeResource.cs:272
>
>   at
>
> System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoaderCompositeResource.CreateResourceLoader
> (System.String path, ExtensionCheck extensionCheck, System.String
> validExtension, ICollection`1 uriRegistry,
> System.Data.Entity.Core.Metadata.Edm.MetadataArtifactAssemblyResolver
> resolver) [0x0004d] in
>
> C:\cygwin\sources\mono\external\entityframework\src\EntityFramework\Core\Metadata\Edm\MetadataArtifactLoaderCompositeResource.cs:306
>
>   at System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoader.Create
> (System.String path, ExtensionCheck extensionCheck, System.String
> validExtension, ICollection`1 uriRegistry,
> System.Data.Entity.Core.Metadata.Edm.MetadataArtifactAssemblyResolver
> resolver) [0x0000b] in
>
> C:\cygwin\sources\mono\external\entityframework\src\EntityFramework\Core\Metadata\Edm\MetadataArtifactLoader.cs:91
>
>   at System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoader.Create
> (System.String path, ExtensionCheck extensionCheck, System.String
> validExtension, ICollection`1 uriRegistry) [0x00000] in
>
> C:\cygwin\sources\mono\external\entityframework\src\EntityFramework\Core\Metadata\Edm\MetadataArtifactLoader.cs:61
>
>   at System.Data.Entity.Core.Metadata.Edm.MetadataCache.SplitPaths
> (System.String paths) [0x0011b] in
>
> C:\cygwin\sources\mono\external\entityframework\src\EntityFramework\Core\Metadata\Edm\MetadataCache.cs:176
>
>   at
>
> System.Data.Entity.Core.Common.Utils.Memoizer`2+<Evaluate>c__AnonStorey14D[System.String,System.Collections.Generic.List`1[System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoader]].<>m__168
> () [0x00000] in
>
> C:\cygwin\sources\mono\external\entityframework\src\EntityFramework\Core\Common\Utils\Memoizer.cs:58
>
>   at
>
> System.Data.Entity.Core.Common.Utils.Memoizer`2+Result[System.String,System.Collections.Generic.List`1[System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoader]].GetValue
> () [0x00035] in
>
> C:\cygwin\sources\mono\external\entityframework\src\EntityFramework\Core\Common\Utils\Memoizer.cs:134
>
>   at
>
> System.Data.Entity.Core.Common.Utils.Memoizer`2[System.String,System.Collections.Generic.List`1[System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoader]].Evaluate
> (System.String arg) [0x0007f] in
>
> C:\cygwin\sources\mono\external\entityframework\src\EntityFramework\Core\Common\Utils\Memoizer.cs:70
>
>   at
>
> System.Data.Entity.Core.Metadata.Edm.MetadataCache.GetOrCreateMetdataArtifactLoader
> (System.String paths) [0x00000] in
>
> C:\cygwin\sources\mono\external\entityframework\src\EntityFramework\Core\Metadata\Edm\MetadataCache.cs:298
>
>   at
> System.Data.Entity.Core.EntityClient.EntityConnection.GetMetadataWorkspace
> () [0x00041] in
>
> C:\cygwin\sources\mono\external\entityframework\src\EntityFramework\Core\EntityClient\EntityConnection.cs:433
>
>   at
>
> System.Data.Entity.Core.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection
> () [0x00017] in
>
> C:\cygwin\sources\mono\external\entityframework\src\EntityFramework\Core\Objects\ObjectContext.cs:1746
>
>   at System.Data.Entity.Core.Objects.ObjectContext..ctor
> (System.Data.Entity.Core.EntityClient.EntityConnection connection, Boolean
> isConnectionConstructor,
> System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlanFactory
> objectQueryExecutionPlanFactory,
> System.Data.Entity.Core.Common.Internal.Materialization.Translator
> translator, System.Data.Entity.Core.Query.InternalTrees.ColumnMapFactory
> columnMapFactory, IDbCommandInterceptor commandInterceptor) [0x000cb] in
>
> C:\cygwin\sources\mono\external\entityframework\src\EntityFramework\Core\Objects\ObjectContext.cs:210
>
>   at System.Data.Entity.Core.Objects.ObjectContext..ctor (System.String
> connectionString) [0x00000] in
>
> C:\cygwin\sources\mono\external\entityframework\src\EntityFramework\Core\Objects\ObjectContext.cs:132
>
>   at System.Data.Entity.Core.Objects.ObjectContext..ctor (System.String
> connectionString, System.String defaultContainerName)
>
> This part of the stack removed.
>
>
>
>
> --
> View this message in context:
> http://mono.1490590.n4.nabble.com/EF-crashing-in-AssemblyName-ReferenceMatchesDefinition-with-is-not-implemented-exception-tp4660659.html
> Sent from the Mono - General mailing list archive at Nabble.com.
> _______________________________________________
> Mono-list maillist  -  Mono-list at lists.ximian.com <javascript:;>
> http://lists.ximian.com/mailman/listinfo/mono-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-list/attachments/20130827/d13bdb85/attachment.html>


More information about the Mono-list mailing list