FileNotFoundException for mscorlib.XmlSerializers.DLL, which doesn't exist

16,144

Solution 1

I'm guessing now. but:

  1. The system might be generating a serializer for the whole of mscorlib, which could be very slow.
  2. You could probably avoid this by wrapping the system type in your own type and serialising that instead - then you'd get a serializer for your own assembly.
  3. You might be able to build the serializer for mscorlib with sgen.exe, which was the old way of building serializer dlls before it got integrated into VS.

Solution 2

The delay is because, having been unable to find the custom serializer dll, the system is building the equivalent code (which is very time-consuming) on the fly.

The way to avoid the delay is to have the system build the DLL, and make sure it's available to the .EXE - have you tried this?

Share:
16,144
Keith
Author by

Keith

Keith Henry Chief Software Architect, building offline-first and responsive applications in the recruitment industry. I'm also on Linked In. Email me on Google's email, my address is ForenameSurname.

Updated on June 05, 2022

Comments

  • Keith
    Keith almost 2 years

    I'm using an XmlSerializer to deserialize a particular type in mscorelib.dll

    XmlSerializer ser = new XmlSerializer( typeof( [.Net type in System] ) );
    return ([.Net type in System]) ser.Deserialize( new StringReader( xmlValue ) );
    

    This throws a caught FileNotFoundException when the assembly is loaded:

    "Could not load file or assembly 'mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified."

    FusionLog:

    === Pre-bind state information ===
    LOG: User = ###
    LOG: DisplayName = mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
     (Fully-specified)
    LOG: Appbase = file:///C:/localdir
    LOG: Initial PrivatePath = NULL
    Calling assembly : System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
    ===
    LOG: This bind starts in default load context.
    LOG: Using application configuration file: C:\localdir\bin\Debug\appname.vshost.exe.Config
    LOG: Using machine configuration file from c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
    LOG: Post-policy reference: mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
    LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers.DLL.
    LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers/mscorlib.XmlSerializers.DLL.
    LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers.EXE.
    LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers/mscorlib.XmlSerializers.EXE.
    

    As far as I know there is no mscorlib.XmlSerializers.DLL, I think the DLL name has bee auto generated by .Net looking for the serializer.

    You have the option of creating a myApplication.XmlSerializers.DLL when compiling to optimise serializations, so I assume this is part of the framework's checking for it.

    The problem is that this appears to be causing a delay in loading the application - it seems to hang for a few seconds at this point.

    Any ideas how to avoid this or speed it up?

  • Keith
    Keith almost 16 years
    Thanks @Will Dean, that's kinda what I figured, but it seems too slow even for that. If it were my own assembly creating the serialisation assembly shouldn't be an issue, but how would I do that for mscorlib?
  • Keith
    Keith almost 16 years
    Thanks again. I think it is (1), but I can't do (2) as it's a struct. I'll try (3)
  • Will Dean
    Will Dean almost 16 years
    > but I can't do (2) as it's a struct. I know I'm being dim here, but what's the problem with it being a struct - obviously there may be some extra copying going on, but relative to the costs of xml serialisation it seems unlikely that's very significant. What is the system.xx type anyway?