mscorlib.XmlSerializers.DLL 的 FileNotFoundException,它不存在

我正在使用 XmlSerializer 反序列化 mscorelib.dll 中的特定类型

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

这在程序集加载时抛出一个捕获的 FileNotFoundException

'无法加载文件或程序集 'mscorlib.XmlSerializers, 版本=2.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089' 或 它的依赖项之一。系统 找不到指定的文件。'

融合日志:

=== 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:localdirinDebugappname.vshost.exe.Config
LOG: Using machine configuration file from c:WINDOWSMicrosoft.NETFrameworkv2.0.50727configmachine.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.

据我所知,没有 mscorlib.XmlSerializers.DLL,我认为 DLL 名称已由 .Net 自动生成以寻找序列化程序。

在编译以优化序列化时,您可以选择创建 myApplication.XmlSerializers.DLL,因此我认为这是框架对其检查的一部分。

问题是这似乎导致了加载应用程序的延迟 - 此时它似乎挂了几秒钟。

有什么想法可以避免这种情况或加快速度吗?

请先 登录 后评论

2 个回答

Will Dean

我现在猜。但是:

  1. 系统可能正在为整个 mscorlib 生成序列化程序,这可能会非常慢。
  2. 您可能可以通过将系统类型包装在您自己的类型中并对其进行序列化来避免这种情况 - 然后您将获得一个用于您自己的程序集的序列化程序。
  3. 您或许可以使用 sgen.exe 为 mscorlib 构建序列化程序,这是在集成到 VS 之前构建序列化程序 dll 的旧方法。
请先 登录 后评论
Will Dean

延迟是因为,由于无法找到自定义序列化程序 dll,系统正在即时构建等效代码(非常耗时)。

避免延迟的方法是让系统构建 DLL,并确保它可用于 .EXE - 您尝试过吗?

请先 登录 后评论