xamarin / Xamarin.Forms

Xamarin.Forms is no longer supported. Migrate your apps to .NET MAUI.
https://aka.ms/xamarin-upgrade
Other
5.63k stars 1.87k forks source link

[Bug] NullReferenceException in the XamlParser when initializing views #15847

Open DomBerentsen opened 9 months ago

DomBerentsen commented 9 months ago

Description

Our apps ocasionally crash because of a NullReferenceException in the XamlParser when initializing views. Something in the Xaml causes the s_xmlnsDefinitions List to be set to null again, and sometimes this happens while it is being used. This is only confirmed to happen on iOS.

Stacktrace:

{System.NullReferenceException: Object reference not set to an instance of an object at Xamarin.Forms.Xaml.XamlParser.GatherXmlnsDefinitionAttributes () [0x00042] in D:\a\1\s\Xamarin.Forms.Xaml\XamlParser.cs:357 at Xamarin.Forms.Xaml.XamlParser.GetElementType (Xamarin.Forms.Xaml.XmlType xmlType, System.Xml.IXmlLineInfo xmlInfo, System.Reflection.Assembly currentAssembly, Xamarin.Forms.Xaml.XamlParseException& exception) [0x0001d] in D:\a\1\s\Xamarin.Forms.Xaml\XamlParser.cs:374 at Xamarin.Forms.Xaml.Internals.XamlTypeResolver.TryResolve (Xamarin.Forms.Xaml.XmlType xmlType, System.Type& type) [0x00000] in D:\a\1\s\Xamarin.Forms.Xaml\XamlServiceProvider.cs:208 at Xamarin.Forms.Xaml.ExpandMarkupsVisitor+MarkupExpansionParser.Parse (System.String match, System.String& remaining, System.IServiceProvider serviceProvider) [0x001b2] in D:\a\1\s\Xamarin.Forms.Xaml\ExpandMarkupsVisitor.cs:183 at Xamarin.Forms.Xaml.ExpandMarkupsVisitor.ParseExpression (System.String& expression, System.Xml.IXmlNamespaceResolver nsResolver, System.Xml.IXmlLineInfo xmlLineInfo, Xamarin.Forms.Xaml.INode node, Xamarin.Forms.Xaml.INode parentNode) [0x000e4] in D:\a\1\s\Xamarin.Forms.Xaml\ExpandMarkupsVisitor.cs:106 at Xamarin.Forms.Xaml.ExpandMarkupsVisitor.Visit (Xamarin.Forms.Xaml.MarkupNode markupnode, Xamarin.Forms.Xaml.INode parentNode) [0x00037] in D:\a\1\s\Xamarin.Forms.Xaml\ExpandMarkupsVisitor.cs:51 at Xamarin.Forms.Xaml.MarkupNode.Accept (Xamarin.Forms.Xaml.IXamlNodeVisitor visitor, Xamarin.Forms.Xaml.INode parentNode) [0x00000] in D:\a\1\s\Xamarin.Forms.Xaml\XamlNode.cs:113 at Xamarin.Forms.Xaml.ElementNode.Accept (Xamarin.Forms.Xaml.IXamlNodeVisitor visitor, Xamarin.Forms.Xaml.INode parentNode) [0x00044] in D:\a\1\s\Xamarin.Forms.Xaml\XamlNode.cs:152 at Xamarin.Forms.Xaml.ElementNode.Accept (Xamarin.Forms.Xaml.IXamlNodeVisitor visitor, Xamarin.Forms.Xaml.INode parentNode) [0x00079] in D:\a\1\s\Xamarin.Forms.Xaml\XamlNode.cs:154 at Xamarin.Forms.Xaml.ElementNode.Accept (Xamarin.Forms.Xaml.IXamlNodeVisitor visitor, Xamarin.Forms.Xaml.INode parentNode) [0x00079] in D:\a\1\s\Xamarin.Forms.Xaml\XamlNode.cs:154 at Xamarin.Forms.Xaml.ElementNode.Accept (Xamarin.Forms.Xaml.IXamlNodeVisitor visitor, Xamarin.Forms.Xaml.INode parentNode) [0x00044] in D:\a\1\s\Xamarin.Forms.Xaml\XamlNode.cs:152 at Xamarin.Forms.Xaml.RootNode.Accept (Xamarin.Forms.Xaml.IXamlNodeVisitor visitor, Xamarin.Forms.Xaml.INode parentNode) [0x00079] in D:\a\1\s\Xamarin.Forms.Xaml\XamlNode.cs:211 at Xamarin.Forms.Xaml.XamlLoader.Visit (Xamarin.Forms.Xaml.RootNode rootnode, Xamarin.Forms.Xaml.HydrationContext visitorContext, System.Boolean useDesignProperties) [0x0002e] in D:\a\1\s\Xamarin.Forms.Xaml\XamlLoader.cs:228 at Xamarin.Forms.Xaml.XamlLoader.Load (System.Object view, System.String xaml, System.Reflection.Assembly rootAssembly, System.Boolean useDesignProperties) [0x000a2] in D:\a\1\s\Xamarin.Forms.Xaml\XamlLoader.cs:104 at Xamarin.Forms.Xaml.XamlLoader.Load (System.Object view, System.String xaml, System.Boolean useDesignProperties) [0x00000] in D:\a\1\s\Xamarin.Forms.Xaml\XamlLoader.cs:77 at Xamarin.Forms.Xaml.XamlLoader.Load (System.Object view, System.Type callingType) [0x00029] in D:\a\1\s\Xamarin.Forms.Xaml\XamlLoader.cs:73 at Xamarin.Forms.Xaml.Extensions.LoadFromXaml[TXaml] (TXaml view, System.Type callingType) [0x00000] in D:\a\1\s\Xamarin.Forms.Xaml\ViewExtensions.cs:37

Steps to Reproduce

We do not have a stable reproduction, it is a matter of timing. If we navigate back and forth to a view a lot it will sometimes cause the exception.

Expected Behavior

Initializing views should not cause crashes

Actual Behavior

Sometimes Initializing views causes a crash

Basic Information

Xamarin.forms: 5.0.0.2291

jfversluis commented 7 months ago

Unfortunately without any reproduction or relevant code this will be pretty hard to diagnose or fix. Please let us know if you uncover any more details.