XmlSerializer不使用sgen创建的XmlSerializers.dll

Din*_*Din 7 .net c# sgen xml-serialization

在我的Visual Studio 2010项目中,我使用以下Post-Build事件命令行来使用sgen来创建XmlSerializers.dll.

发布后事件:

"$(ProgramFiles)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\sgen.exe" /a:"$(TargetPath)" /c:/keyfile:"c:\myproject\mykey.snk" /f
Run Code Online (Sandbox Code Playgroud)

我的项目名称很强,所以使用相同的键强名称"XmlSerializers.dll".VS在输出文件夹中创建XmlSerializers.dll.

但是,我注意到使用ProcessMonitor,.NET仍然在运行时调用CSC.exe.我来到这篇帖子,用户有类似的问题,并通过使用XmlSerializer(Type)构造函数解决.

我在我的代码中使用了相同的技术,但它仍然调用csc.exe:

var fs = new FileStream(SettingsFilePath, FileMode.Open);
try
{
var serializer = new XmlSerializer(typeof(AppSettings));
settings = (AppSettings)serializer.Deserialize(fs);
}
finally
{
fs.Close();
}
Run Code Online (Sandbox Code Playgroud)

我需要使用预编译的XML序列化的原因,因为性能和我有时看到Windows关闭时csc.exe错误.我的应用程序在表单关闭时保存数据,在关闭期间,它失败,因为Windows在关闭序列期间不允许新进程启动.我已经看到了通过预编译XML序列化来解决这个问题的建议.

有关为什么XmlSerializer不使用sgen创建的XmlSerializers.dll的任何建议?

谢谢.

tgr*_*fin 0

您是否尝试过在生成的 dll 上运行ngen.exe ?

跑步

ngen.exe install myproject.XmlSerializers.dll
Run Code Online (Sandbox Code Playgroud)

将在图像缓存中安装 dll 的本机映像,该映像应在运行时使用,而不是调用 JIT 编译器。