Tag: sgen

Serialize()不使用Sgen生成的.XmlSerializers.dll

我的.NET 3.5库中有一个sgen步骤,在输出目录中生成一个正确的XYZ.XmlSerializers.dll。 仍然有较差的序列化性能,我发现.NET仍然在运行时调用csc。 使用进程监视器,我看到.NET正在搜索名为“XYZ.XmlSerializers.-1378521009.dll”的DLL。 为什么文件名中有’-1378521009’? 如何告诉.NET使用sgen生成的“普通”DLL?

如何强制Sgen创建.net 3.5序列化程序集

我的.NET 3.5库中有一个sgen构建步骤。 在VS2010中,这会生成.NET 4 MyLib.XmlSerializers.dll,无法从.NET 3.5应用程序加载。 有谁知道如何更改构建步骤以获得正确的程序集版本? 是否可以将IL合并序列化程序组件和库合并为单个dll? 这是我的sgen构建步骤: 谢谢 编辑:我在这里找到了同样的问题,但我会等待一段时间,看看有没有更好的解决方案。

SGEN XMLSerializer – 应该添加.XMLSerializers.dll作为对当前项目或GAC的引用吗?

我用XMLSerializer类做了一些事情。 像大多数初学者一样,我在app start上面临性能问题。 我阅读了很多博客,文章,最后使用了SGEN工具。 现在表现看起来还不错,但对我来说仍然不太清楚。 1)我应该使用这样的SGEN语法: SGen.exe /assembly:MyAssembly /type:MyRootXmlType 或者它就足够了(我目前使用这种语法,我的程序集中只有一个Serializable类): SGen.exe /assembly:MyAssembly 什么时候/ type参数在实践中有用? 2)我在MSDN上阅读( http://msdn.microsoft.com/en-us/library/ee704594.aspx ) 此命令生成序列化程序集MyAssembly.XmlSerializers.dll,应将其添加为当前项目或GAC的引用。 但是在所有其他博客和文章上(例如在SO上)我读到这就足以将MyAssembly.XmlSerializers.dll放入MyAssembly存在的文件夹中。 什么是对的? 3)只需生成.XmlSerilizers.dll并将其与MyAssembly一起部署就足够了,还是应该在我的代码中添加一些东西? 我不这么认为,但我想确保我不必更改我的代码,并且“魔法”会自动发生。

XmlSerializer不使用由sgen创建的XmlSerializers.dll

在我的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 我的项目名称很强,所以使用相同的键强名“XmlSerializers.dll”。 VS在输出文件夹中创建XmlSerializers.dll。 但是,我注意到使用ProcessMonitor,.NET仍然在运行时调用CSC.exe。 我来到这篇post ,用户有类似的问题,并通过使用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(); } 我需要使用预编译的XML序列化的原因,因为性能和我有时看到Windows关闭时csc.exe错误。 我的应用程序在表单关闭时保存数据,在关闭期间,它失败,因为Windows在关闭序列期间不允许新进程启动。 我已经看到了通过预编译XML序列化来解决这个问题的建议。 有关为什么XmlSerializer不使用sgen创建的XmlSerializers.dll的任何建议? 谢谢。

为自定义XmlSerializer生成Xml序列化程序集

我的类中有方法使用与使用默认序列化程序生成的XML结构不同的XML结构进行序列化/反序列化。 这些方法为我的类型创建了一个XmlSerializer,但是有一大堆覆盖。 当调用这些方法时,我猜.NET内部仍会生成序列化程序集,但我想在编译后生成此程序集,因此它不会在运行时生成。 如何为此自定义序列化生成序列化程序集? 如果我对该类型使用sgen.exe,它似乎只生成默认的序列化程序。 特别是我需要生成序列化程序集的原因是我的代码是从Internet Explorer进程中调用的,它在保护模式下运行。 如果.net运行时尝试生成序列化程序集,则会调用csc.exe并提示用户,询问是否允许运行此进程。 我不希望提示用户! 所以需要在没有csc.exe的情况下完成所有序列化/反序列化。 我能想到的一个选择是捕获在运行时生成的.cs,将它放在一个单独的程序集中,然后将其包含在我的产品中。 除了有点icky,这引发了如何自动生成.cs作为我的构建过程的一部分的问题… 也许值得一提的是:我的自定义xml序列化也序列化了嵌套类,因此也许会有自动生成的序列化器。 我的自定义序列化主要是按照以下几行完成的 – 它将XmlIgnore添加到某些属性中,并从其他属性中删除XmlIgnore。 其中许多属性返回需要序列化的对象,其中一些实现IXmlSerializable,一些使用默认序列化。 public void SerializeToCustomXml1(XmlWriter writer) { try { CustomXmlSerializer1.Serialize(writer, this); } catch (Exception) { } } /// /// Static serializer so it’s created just once. There’s another one like this CustomXmlSerializer2 with a slightly different format again. /// private […]