问题标签 [sgen]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1278 浏览

visual-studio-2005 - 为什么 Visual Studio 2005 不会生成 Xml 序列化程序集?

当我将项目设置“生成序列化程序集”设置为“开”时,为什么 Visual Studio 2005 不生成序列化设置?

0 投票
2 回答
1324 浏览

c# - XmlSerializer、sgen.exe 和泛型

我有一个通用类型:

我想从/到 XML 反序列化/序列化这种类型的实例。IContent是这样定义的:

基本上,我希望Packet使用其内容提供的序列化程序来序列化和反序列化其内容成员。这个序列化器实际上是一个由 sgen.exe 生成的预编译 xml 序列化器的实例。

是否有可能不Packet<T>实施IXmlSerializable

0 投票
3 回答
537 浏览

c# - 反序列化 XML 文件的最有效方法是什么

阿罗哈,

我有一个想要反序列化的 8MB XML 文件。我正在使用这段代码:

这段代码运行大约一分钟,这对我来说似乎相当慢。我尝试使用 sgen.exe 来预编译序列化 dll,但这并没有改变性能。

我还有哪些其他选择来提高性能?

[编辑] 我需要反序列化创建的对象来执行(基本)转换。XML 是从外部 Web 服务接收的。

0 投票
1 回答
4108 浏览

.net - 使用 XmlAttributeOverrides 预编译 XmlSerializer

在 .NET 中构造 XmlSerializer 实例时,会动态生成用于序列化和反序列化指定类型的程序集。这是一个耗时的过程。Microsoft 的 sgen.exe 工具可用于预编译 XmlSerializer 实例以供以后使用,而无需动态生成它们。不幸的是,这对于使用 XmlAttributeOverrides 的 XmlSerializer 实例是不可能的。

有没有办法预编译这些 XmlSerializer 实例以避免在运行时生成?

0 投票
1 回答
548 浏览

.net - 为什么我的应用程序在执行期间使用 CSC

我一直在尝试使用 Remotesoft Linker 和 Mini Deployment 工具从我的托管代码创建单个本机可执行文件(不需要安装框架)。它具有的可配置功能之一是 csc.exe 是否可用于最终可执行文件。它的文档说它通常只在使用 XML 序列化时才需要(我是)。我修改了构建过程以使用 SGen 创建序列化程序集,并将结果添加到使用我的 xml 类的解决方案中每个项目的引用中。序列化类使其成为链接的 .net 可执行文件(所有 .net dll 组合成一个托管 exe);所以我假设我已经正确配置了。

但是,我的应用程序在运行时仍会尝试执行 csc。我是否对序列化程序集做错了什么,导致它在运行时重新创建;或者我的应用程序是否在做其他需要 csc 的事情,我该如何确定?

http://www.remotesoft.com/linker/

在构建过程中生成 Xml 序列化程序集

编辑:使用修改后的 app.config 进行一些测试,以保持序列化文件在生成时可见(通过撤消构建时间生成进行测试);看来我之前确实已经正确创建了它们。除非框架的不同部分在运行时调用 csc 并且使用不同的标志不隐藏其结果,否则我认为 RemoteSoft 工具可能是罪魁祸首。我不能确定,因为即使它注入的 app.config 文件告诉它,输出可执行文件也不会留下它创建的任何临时文件。

我使用的 app.info 是这个。在其他地方,我看到了使用值 4 的示例,但无法找到它们的行为之间的任何区别。

0 投票
1 回答
2927 浏览

.net - SGEN、InternalsVisibleTo 和程序集签名

我正在尝试做一些不寻常的事情......

我有这个类 Foo :

注意 Name 的内部 setter 和内部默认构造函数。这通常会阻止 XML 序列化,但我还使用 InternalsVisibleTo 将 XML 序列化程序集标记为“朋友”:

我添加了一个 MSBuild 任务来预生成序列化程序集:

这很好用: Name 属性已正确序列化和反序列化。

现在,我想签署我的程序集......所以我为我的程序集定义了一个密钥文件,并修改了 InternalsVisibleTo 声明以匹配密钥:

但现在 SGEN 失败了:

无法生成临时类(结果=1)。
无法将属性或索引器“TestXML2008.Foo.Name”分配给 - 它是只读的

SGEN 任务应该通过宏选择密钥文件,但显然这还不够……我还尝试在 SGEN 任务中明确指定密钥文件,但没有成功。当我在命令行上使用 sgen.exe 时,我得到了相同的结果......

我错过了什么吗?我不明白为什么在我签署程序集时它不起作用......

0 投票
1 回答
578 浏览

.net - Sgen.exe 中的错误

sgen.exe 好像不能生成泛型 XmlSerializer 吧?
我的通用类型:

序列化代码:

运行 sgen.exe 并使用“Reflector”检查生成的程序集后,我发现生成的程序集不包含 MasterxXmlSerializer 类,为什么?

有人有同样的经历吗?如何解决?

0 投票
2 回答
2726 浏览

.net - 使用 Sgen 和 ILMerge 预生成 XmlSerializer。数组有问题

我广泛使用 XmlSerializer,而不是允许 .NET 在运行时生成必要的序列化程序集,我想提前生成这些程序集并将它们与我的应用程序捆绑在一起。我能够在构建时使用 Sgen 生成这些程序集。此外,我必须为要序列化的每个数组类型单独运行 Sgen(使用 sgen /t:Foo[])。最后,我使用 ILMerge 将数组类型序列化类合并到 Foo.XmlSerializers.dll 程序集中。我已经用 ildasm 验证了 Foo.XmlSErializers.dll 实际上包含所有合并的类。

在运行时,.NET 成功地从 Foo.XmlSerializers.dll 加载 FooSerializer,而无需调用 csc 并生成临时程序集。但是,.NET 无法从同一个 dll 加载 ArrayOfFooSerializer,并且实际上调用了 csc。

如何成功地为数组预生成序列化类型?

考虑以下 2 个程序集及其简化内容:

程序集:MyApp.exe

程序集:Foo.dll

更多信息:

以下 app.config 导致将 XmlSerialization 相关事件添加到事件日志中

我没有看到 Foo 类型的事件。我看到 Foo[] 的以下消息:

预生成的序列化程序“Foo.XmlSerializers”已过期。您需要为 'Foo[]' 重新生成序列化程序。

0 投票
4 回答
5610 浏览

c# - sgen.exe x64 .net c# 因“格式不正确的程序集”而失败

我有 ws2008 x64 和 vs2008。

当我将 vs 设置为 x64(因为我有 64 位 dll)并运行编译时,sgen 说

试图加载格式不正确的程序集

VS takse sgen 来自 C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\

我认为它应该从 C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\x64\

当我将 64 位版本的 sgen 放入 C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ (替换 32 位版本)时。我能够编译。

我应该怎么做才能在 vs 下指向正确版本的 sgen

我可以以某种方式为一个项目配置解决方案平台以指向正确的 sgen(x86 到 32 位和 x64 到 64 位 sgen 版本)?

0 投票
1 回答
1643 浏览

.net - 如何使 sgen.exe 保留程序集的版本?

我想为我的程序集创建一个序列化程序集。 sgen没问题,但我不知道如何让它为序列化程序集分配与源程序集相同的版本。

有任何想法吗?