Bad install of WPF?


Magnus Hiie reported an interesting problem that some of you may be hitting (thanks Magnus!).  He saw


System.Windows.Serialization.BamlParseException occurred
Message=”Error at element ‘StaticExtension’ in markup file ” : Binary format of the specified custom attribute was invalid..”


on pretty much every xaml file he tried to load.  Problem is that the machine has an assembly in the GAC that can’t be loaded, and WPF needs to look at every assembly in the GAC.  Assembly can’t be read, so WPF chokes.  We’ll work on making this a little more tolerant, but for now the solution is to remove whatever unreadable assembly is in your GAC.  You can figure out which assembly is causing the problem by breaking on first chance exceptions, call stack will look something like:


mscorlib.dll!System.Reflection.CustomAttributeData.GetCustomAttributes(System.Reflection.Module module = {Microsoft.BizTalk.KwTpm.StsBizTalkAdapter.dll}, int tkTarget) + 0x4f bytes 


As to why we’re touching every assembly in the GAC — we scan every assembly for XmlnsDefinitionAttribute so we know how to map XML namespaces into assemblies.  We cache it, so we don’t need to do this every time a process launches, but we do need to read all the assemblies once.


Comments (3)

  1. Does this attribute allow my control library to define the namespace to use in XAML without having to have the mapping directive in the referencing XAML file? Do I still need the xmlns:x=y or does the attribute define the prefix as well? I will check the docs also now that I know such an attribute even exists.

  2. Pradeep Kumar says:

    I get a variation of the BamlParseException.

    Here is the trace.

    what is going wrong over here?

    System.Windows.Serialization.BamlParseException: Error at element ‘StaticExtension’ in markup file ” : Could not load type ‘System.Runtime.CompilerServices.NGenAttribute’ from assembly ‘mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’.. —> System.TypeLoadException: Could not load type ‘System.Runtime.CompilerServices.NGenAttribute’ from assembly ‘mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’.

  3. Magnus Hiie says:

    I must say that this assembly was _not_ invalid. The problem occurred because the abovementioned assembly was compiled for .NET 1.x, and some assembly attributes have changed in 2.0, so you can’t enumerate attributes on it on .NET 2.0. But it is a perfectly valid assembly when using reflection with .NET 1.x.

Skip to main content