Hi Abe,
That is probably not going to help anyone. This issue will be hit over and over again in the distribution and really needs to be addressed. What happens when you change code like this and keep a private build is that you are either stuck at that version forever or you have to merge in your private changes every time you update. The size of that effort will grow in time if you go down that route. Eventually it becomes impossible to update and you lose the value of fixes that are added to the trunk. So I was looking for people who were impacted by this, had a good grasp of the issues such as determining if the assemblies are the same. If someone had already fixed it, I would not have to otherwise I have to fix it and submit it to the list for approval or suggestions. I appreciate your suggestion. It is easy to get it up and running, on the surface but is unmanageable over any period of time. This is a bug and we need to fix it. Thanks, ________________________________ From: Abe Gillespie [[email protected]] Sent: Tuesday, August 27, 2013 7:25 AM To: Mark Lintner Cc: [email protected] Subject: Re: [Mono-list] EF crashing in AssemblyName.ReferenceMatchesDefinition with is not implemented exception 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 - [email protected]<https://connect.emailsrvr.com/owa/UrlBlockedError.aspx> http://lists.ximian.com/mailman/listinfo/mono-list
_______________________________________________ Mono-list maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-list
