question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

System.IO.FileLoadException: Could not load file or assembly Esri.ArcGISRuntime

See original GitHub issue

In our Windows release builds (but not when running from Visual Studio) our application runs into an exception initializing the ScaleLine control. The ScaleLine is used inside a WPF class library (EsriMapControl) called by another WPF library (CadMap) which is launched from a WinForms application (CAD_APP). This doesn’t seem to occur in another application which is WPF and calls these two libraries.

It seems like the ScaleLine is trying to load runtime 100.4 but EsriMapControl, CadMap, and CAD_APP all have assembly redirects in their app.config for ArcgisRuntime:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
        <assemblyIdentity name="Esri.ArcGISRuntime" publicKeyToken="8fc3cc631e44ad86" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-100.5.0.0" newVersion="100.5.0.0" />
    </dependentAssembly>
</assemblyBinding>

The references to Esri.ArcGISRuntime and Esri.ArcGISRuntime.Toolkit have ‘specific version’ set to False.

Because of that I was expecting that the ScaleLine would redirect to runtime 100.5 which is what we have installed in the application. I did notice that Esri.ArcGISRuntime is strong named and Esri.ArcGISRuntime.Toolkit is not. Could that be related?

Here is the full stacktrace:

12:35:35.2931 MapControl '1-' Error 'IntegratedMapControl.cs - InitializeMapControl(): System.Windows.Markup.XamlParseException: The invocation of the constructor on type 'Esri.ArcGISRuntime.Toolkit.UI.Controls.ScaleLine' that matches the specified binding constraints threw an exception. ---> System.TypeInitializationException: The type initializer for 'Esri.ArcGISRuntime.Toolkit.UI.Controls.ScaleLine' threw an exception. ---> System.IO.FileLoadException: Could not load file or assembly 'Esri.ArcGISRuntime, Version=100.4.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
   at Esri.ArcGISRuntime.Toolkit.UI.Controls.ScaleLine..cctor()
   --- End of inner exception stack trace ---
   at System.Runtime.CompilerServices.RuntimeHelpers._RunClassConstructor(RuntimeType type)
   at System.Windows.DependencyProperty.FromName(String name, Type ownerType)
   at System.Windows.Baml2006.Baml2006Reader.WriteTypeConvertedInstance(Int16 converterId, Int32 dataByteSize)
   at System.Windows.Baml2006.Baml2006Reader.Process_PropertyCustom()
   at System.Windows.Baml2006.Baml2006Reader.Process_OneBamlRecord()
   at System.Windows.Baml2006.Baml2006Reader.ReadObject(KeyRecord record)
   at System.Windows.ResourceDictionary.CreateObject(KeyRecord key)
   at System.Windows.ResourceDictionary.OnGettingValue(Object key, Object& value, Boolean& canCache)
   at System.Windows.ResourceDictionary.OnGettingValuePrivate(Object key, Object& value, Boolean& canCache)
   at System.Windows.ResourceDictionary.GetValueWithoutLock(Object key, Boolean& canCache)
   at System.Windows.ResourceDictionary.GetValue(Object key, Boolean& canCache)
   at System.Windows.ResourceDictionary.GetValueWithoutLock(Object key, Boolean& canCache)
   at System.Windows.ResourceDictionary.GetValue(Object key, Boolean& canCache)
   at System.Windows.ResourceDictionary.FetchResource(Object resourceKey, Boolean allowDeferredResourceReference, Boolean mustReturnDeferredResourceReference, Boolean canCacheAsThemeResource, Boolean& canCache)
   at System.Windows.SystemResources.LookupResourceInDictionary(ResourceDictionary dictionary, Object key, Boolean allowDeferredResourceReference, Boolean mustReturnDeferredResourceReference, Boolean& canCache)
   at System.Windows.SystemResources.FindDictionaryResource(Object key, Type typeKey, ResourceKey resourceKey, Boolean isTraceEnabled, Boolean allowDeferredResourceReference, Boolean mustReturnDeferredResourceReference, Boolean& canCache)
   at System.Windows.SystemResources.FindResourceInternal(Object key, Boolean allowDeferredResourceReference, Boolean mustReturnDeferredResourceReference)
   at System.Windows.StyleHelper.GetThemeStyle(FrameworkElement fe, FrameworkContentElement fce)
   at System.Windows.FrameworkElement.UpdateThemeStyleProperty()
   at System.Windows.FrameworkElement.OnThemeStyleKeyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
   at Esri.ArcGISRuntime.Toolkit.UI.Controls.ScaleLine.Initialize()
   at Esri.ArcGISRuntime.Toolkit.UI.Controls.ScaleLine..ctor()
   --- End of inner exception stack trace ---
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
   at VTM.EsriMapControl.Controls.MapControl.InitializeComponent()
   at VTM.EsriMapControl.Controls.MapControl..ctor()
   at VTM.EsriMapControl.Controls.MapControl..ctor(BaseMapConfig mapConfig)
   at VTM.EsriMapControl.Controls.BaseMapControl.InitVtmMapControl()
   at VTM.EsriMapControl.Controls.BaseMapControl..ctor(BaseMapConfig config)
   at VTM.EsriMapControl.Controls.VdxMapControl..ctor(VDXMapConfig config)
   at CadMap.IntegratedMapControl.<InitializeMapControl>d__20.MoveNext()
   at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
   at System.Environment.get_StackTrace()
   at VTM.VDXLog.NLogBaseLogManager.WriteErrorLog(Int32 logType, String message, Exception ex)
   at CAD_APP.frmMain.MapControl_LogRaised(Object sender, LogRaisedEventArgs e)
   at VTM.EsriMapControl.Diagnostics.MapLogger.OnLogRaised(LogRaisedEventArgs args)
   at VTM.EsriMapControl.Diagnostics.MapLogger.Error(String message, Exception ex)
   at CadMap.IntegratedMapControl.<InitializeMapControl>d__20.MoveNext()
   at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[TStateMachine](TStateMachine& stateMachine)
   at CadMap.IntegratedMapControl.InitializeMapControl()
   at CadMap.IntegratedMapControl.<IntegratedMapControl_Loaded>d__19.MoveNext()
   at System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Start[TStateMachine](TStateMachine& stateMachine)
   at CadMap.IntegratedMapControl.IntegratedMapControl_Loaded(Object sender, RoutedEventArgs e)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
   at System.Windows.BroadcastEventHelper.BroadcastEvent(DependencyObject root, RoutedEvent routedEvent)
   at System.Windows.BroadcastEventHelper.BroadcastLoadedEvent(Object root)
   at MS.Internal.LoadedOrUnloadedOperation.DoWork()
   at System.Windows.Media.MediaContext.FireLoadedPendingCallbacks()
   at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
   at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
   at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
   at System.Windows.Media.MediaContext.Resize(ICompositionTarget resizedCompositionTarget)
   at System.Windows.Interop.HwndTarget.OnResize()
   at System.Windows.Interop.HwndTarget.HandleMessage(WindowMessage msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Interop.HwndSource.HwndTargetFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.HwndSubclass.DefWndProcWrapper(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.SafeNativeMethods.SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, Int32 x, Int32 y, Int32 cx, Int32 cy, Int32 flags)
   at System.Windows.Forms.Integration.ElementHost.SetHWndSourceWindowPos()
   at System.Windows.Forms.Integration.ElementHost.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
   at System.Windows.Forms.Control.DefWndProc(Message& m)
   at System.Windows.Forms.Control.WmWindowPosChanged(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.Integration.ElementHost.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.SafeNativeMethods.SetWindowPos(HandleRef hWnd, HandleRef hWndInsertAfter, Int32 x, Int32 y, Int32 cx, Int32 cy, Int32 flags)
   at System.Windows.Forms.Control.SetBoundsCore(Int32 x, Int32 y, Int32 width, Int32 height, BoundsSpecified specified)
   at System.Windows.Forms.Control.SetBounds(Int32 x, Int32 y, Int32 width, Int32 height)
   at Crownwood.DotNetMagic.Controls.TabControl.Recalculate()
   at Crownwood.DotNetMagic.Controls.TabControl.OnPagePropertyChanged(TabPage page, Property prop, Object oldValue)
   at Crownwood.DotNetMagic.Controls.TabPage.OnPropertyChanged(Property prop, Object oldValue)
   at Crownwood.DotNetMagic.Controls.TabPage.set_Control(Control value)
   at Crownwood.DotNetMagic.Docking.WindowContentTabbed.OnContentChanged(Content obj, Property prop)
   at Crownwood.DotNetMagic.Docking.Content.PropChangeHandler.Invoke(Content obj, Property prop)
   at Crownwood.DotNetMagic.Docking.Content.OnPropertyChanged(Property prop)
   at Crownwood.DotNetMagic.Docking.Content.set_Control(Control value)
   at CAD_APP.frmMain.InitIntegratedMap(Boolean forceReload)
   at CAD_APP.frmMain.initAfterSignon(wso_ActionFields_TypeElement[] actions, Boolean changeLanguage, String poi_get_token)
   at CAD_APP.CADScreens.uscSignon.ProcessProcessCommand()
   at CAD_APP.frmMain.processToolStripMenuItem_Click(Object sender, EventArgs e)
   at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
   at System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
   at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
   at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
   at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
   at System.Windows.Forms.ToolStripItem.PerformClick()
   at CAD_APP.frmMain.frmMain_KeyDown(Object sender, KeyEventArgs e)
   at System.Windows.Forms.Control.OnKeyDown(KeyEventArgs e)
   at System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m)
   at System.Windows.Forms.Form.ProcessKeyPreview(Message& m)
   at System.Windows.Forms.Control.ProcessKeyPreview(Message& m)
   at System.Windows.Forms.Control.ProcessKeyPreview(Message& m)
   at System.Windows.Forms.Control.ProcessKeyPreview(Message& m)
   at System.Windows.Forms.Control.ProcessKeyPreview(Message& m)
   at System.Windows.Forms.Control.ProcessKeyPreview(Message& m)
   at System.Windows.Forms.Control.ProcessKeyPreview(Message& m)
   at System.Windows.Forms.Control.ProcessKeyMessage(Message& m)
   at System.Windows.Forms.Control.WmKeyChar(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.TextBoxBase.WndProc(Message& m)
   at System.Windows.Forms.TextBox.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.Run(Form mainForm)
   at CAD_APP.Program.Main(String[] args)'

Issue Analytics

  • State:closed
  • Created 4 years ago
  • Comments:6 (3 by maintainers)

github_iconTop GitHub Comments

1reaction
kgillibrandcommented, Jan 24, 2020

@dotMorten I made a small sample but it doesn’t experience the problem. Unfortunately I can’t reproduce this outside our application. I’ll close this but thanks for the help 👍

1reaction
kgillibrandcommented, Dec 4, 2019

I was able to resolve this for now by intercepting the failed assembly resolve and loading the correct runtime version:

AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
	Assembly result = null;
	var resolvingAssembly = new AssemblyName(args.Name);

	if (resolvingAssembly.Name == "Esri.ArcGISRuntime")
	{
		//Grab the installed ArcGISRuntime by grabbing the assembly from one of the Runtime's classes
		var installedAssembly = Assembly.GetAssembly(typeof(GraphicsOverlay));
		var installedRuntime = new AssemblyName(installedAssembly.FullName);

		//If we're trying to load something different from the installed version override that
		if (resolvingAssembly.Version != installedRuntime.Version)
		{
			result = installedAssembly;
		}
	}

	return result;
}
Read more comments on GitHub >

github_iconTop Results From Across the Web

Could not load file or assembly 'Esri.ArcGISRuntime ...
BadImageFormatException normally means that there is a conflict in bitness. Like you are compiling it into a 64bit app but the dependency you ......
Read more >
System.IO.FileLoadException: Could not load file or ...
This doesn't seem to occur in another application which is WPF and calls these two libraries. ... The references to Esri.ArcGISRuntime and Esri....
Read more >
Error: Could Not Load File or Assembly 'ArcGIS.Desktop. ...
The XAML Designer that ships with Visual Studio 2017 and 2019 is not capable of loading x64 assemblies. This causes the error message....
Read more >
Trouble loading assembly Esri.ArcGISRuntime.Xamari...
System.BadImageFormatException: Could not load file or assembly 'Esri.ArcGISRuntime.Xamarin.Forms, Version=100.7.0.0, Culture=neutral, ...
Read more >
System.IO.FileNotFoundException: Could not load f...
We are currently upgrading to pro3.1 with .Net6 from pro2.9 with .Net4.8 and we have some test coverage that depend on arcgis pro...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found