问题标签 [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.
visual-studio - 自定义构建 SGEN 组件并包含在安装程序中
我对一些 SGEN 的东西感到很困惑。我已经为我的一个项目启用了序列化程序集的生成。最初我得到了跟随错误,我相信我已经通过在远程程序集上做一些 caspol 的东西来解决。
无法加载一种或多种请求类型。检索 LoaderExceptions 属性以获取更多信息
但是,现在我没有生成程序集。添加一些调试/详细输出会提供消息“SS.dll 不包含任何可以使用 XmlSerializer 序列化的类型”。我读过这是因为 VS 应用了代理开关。奇怪的是,它似乎对任何其他项目都没有问题。
因此,如果我禁用代理开关(例如此处),它似乎可以工作。然而,链接的构建事件似乎完成了所有项目。我对 MSBuild 了解不足,无法调整到一个项目,有人知道我需要改变什么吗?
此外,如果进行了此更改,是否有办法自动将其包含在安装程序 (VDProj) 中?我无法静态链接到 SS.XmlSerializers.dll,因为每个开发人员都使用自定义路径。
c# - 为自定义 XmlSerializer 生成 Xml 序列化程序集
我的类中有用于序列化/反序列化的方法,使用与使用默认序列化程序生成的 XML 结构不同的 XML 结构。这些方法为我的类型创建了一个 XmlSerializer,但有一大堆覆盖。当这些方法被调用时,我猜内部.NET 仍然会生成一个序列化程序集,但我想在编译后生成这个程序集,所以它不会在运行时生成。如何为此自定义序列化生成序列化程序集?如果我对该类型使用 sgen.exe,它似乎只生成默认序列化程序。
特别是我需要生成序列化程序集的原因是我的代码是从 Internet Explorer 进程中调用的,该进程在保护模式下运行。如果 .net 运行时尝试生成序列化程序集,它会调用 csc.exe 并提示用户,询问是否允许运行此进程。我不希望用户被提示!所以需要在没有 csc.exe 的情况下完成所有序列化/反序列化。
我能想到的一种选择是捕获在运行时生成的 .cs,将其放入单独的程序集中,然后将其包含在我的产品中。除了有点恶心之外,这引发了如何在我的构建过程中自动生成该 .cs 的问题......
也许还值得一提:我的自定义 xml 序列化也序列化嵌套类,所以也许也会有自动生成的序列化器。我的自定义序列化主要是按照以下几行完成的——它将 XmlIgnore 添加到某些属性并从其他属性中删除 XmlIgnore。其中许多属性返回需要序列化的对象,其中一些实现 IXmlSerializable,一些使用默认序列化。
更新:哦,这个答案表明这是不可能的,因为如果您使用 XmlOverrides,XmlSerializer 甚至不会寻找预编译的程序集。该死。然后我想我最好的选择是生成序列化代码并将其包含在我的项目中并直接调用它而不是调用 XmlSerializer。关于如何巧妙地做到这一点的任何想法?
.net - SGEN 错误反映类型
作为我的构建的一部分,我已经实现了生成 Xml 序列化程序集的公认答案中提到的更改
构建 exe 项目的错误消息:
错误 14 出现反映类型“myNamespace.myAssembly.myForm.MicroContact”的错误。C:\dev\src\myClient\myClient\SGEN myClient
这是 MicroContact 的代码(这里没有什么独特之处):
有什么方法可以让我获得构建错误的内部异常吗?
visual-studio - 使用 sgen 支持从 Visual Studio 编译 Mono
我有一个从 Visual Studio 构建中获得的 Mono 二进制文件。用于启用 sgen 垃圾收集器的选项 --gc=sgen 不可用:
如何启用此选项?有没有定义?
.net - XmlSerializer.Serialize 需要很长时间......为什么?
给定来自 RssXmlHelper.cs 中 RssToolkit 的以下代码:
在我的 WCF 服务中调用 serializer.Serialize() 时,需要花费大量时间。
我有这个坐在我从我的项目中调用的 WCF 服务中。我踏入其中,果然,这就是问题所在。
然后我在我的解决方案中引用该项目,没问题。
在 WCF 服务中使用它时,我应该做些什么不同的事情吗?
- 更新 -
好的,所以我安装了适用于 Windows 7 和 .NET Framework 4 的 Microsoft Windows SDK,运行 sgne.exe RssToolkit.dll 并收到以下错误:
我的 RssToolkit 项目的目标框架设置为 4.0,与 .Net 4 的 Windows SDK 匹配。这不正确吗?
c# - 用于非 Web 项目的 XML 序列化程序集
我正在尝试解决 VS 2010(VB.NET 和 C#)中自动生成的序列化程序集这一众所周知的问题。项目设置中的“生成序列化程序集”选项对非 Web 项目没有任何作用(参见http://blog.devstone.com/aaron/archive/2008/02/07/2778.aspx等)。因此,对序列化程序的调用会产生非常不幸的文件 i/o 异常,并且无法治愈。上面建议的方法似乎不适用于 VS2010,并且 SGEN 仍然在启用 /proxytypes 的情况下运行。
crystal-reports - 混合模式程序集是针对版本 X 构建的,如果没有附加配置信息,则无法在运行时版本 Y 中加载
做了一些代码重构后,我的 VS2010 VB.Net Web 应用程序项目已经停止编译,出现以下错误:
“混合模式程序集是针对运行时版本‘v1.1.4322’构建的,如果没有额外的配置信息,则无法在 4.0 运行时中加载。”
在 Visual Studio 的错误列表的“文件”列中是“SGEN”这个词,但是当我双击时,该文件不存在(“无法打开该文档。它已被重命名、删除或移动。”)我认为它与序列化有关,但需要的附加配置信息是什么?我花了几个小时研究这个错误,每个人都说将以下内容添加到 app.config 文件的配置选项卡中:
但是,我已将此添加到我可以找到或创建的每个配置文件中,但到目前为止它没有帮助。
我怀疑问题的一部分可能是 Crystal Reports,它的 DLL 确实是针对 dot net 的 v1.1.4322 构建的。
我应该将 legacyRuntime 配置添加到哪个配置文件?这甚至是正确的解决方案吗?
c# - 无法生成临时类 - 签署程序集时加密失败
我有一个签名的类库,我想通过 sgen 工具为其创建程序集。但是,当我尝试运行以下命令时出现错误:
$ sgen.exe /a:testsign.dll /force /compiler:/keyfile:..\..\testsign.pfx /verbose /n
错误:无法生成临时类(结果=1)。
错误 CS1548:签署程序集 '[...path...]\TestSign.XmlSerializers.dll' 时加密失败 - '错误签署程序集 - - 参数不正确。'如果您需要更多帮助,请输入“sgen /?”。
我检查了MSDN上的错误,其中指出
CS1548 在程序集签名失败时发生。这通常是由于无效的密钥文件名、无效的密钥文件路径或损坏的密钥文件造成的。
但是,我刚刚创建了密钥,路径是正确的,据我所知,Visual Studio 2010 不会创建损坏的密钥。
这个问题很容易重现。
- 使用此处粘贴的代码创建一个新的类库。
- 创建两个类,一个
class TestSigning
和一个class Model
- 转到项目属性>签名并检查“签署此程序集”
- 创建一个新的强名称密钥文件
- 打开 Visual Studio 命令提示符 (2010)
- 找到dll并运行
sgen /a:<dllname> [... as above ...]
我的猜测是密钥文件的公钥。但是我找不到任何关于我如何告知sgen
我用来保护我的密钥文件的密码的来源。
我不确定如何进行。我在这里查看的其他线程具有相同的错误“标题”unable to generate temporary class
但不同的错误详细信息,其中没有Cryptographic failure
(我发现)。
visual-studio-2010 - 试图加载格式不正确的程序集
我正在同时为不同的项目使用VS2008和VS2010。最近我尝试为实体项目生成序列化程序集,但无法通过 Visual Studio 2010 生成相同的程序集。这会引发以下错误:
这是我为实体项目设置的构建后事件
我能够从 VS 2010 命令行生成 Serializer dll。 对于VS2008项目;线路工作正常。但是,错误出现在 VS2010 项目上!
FrameworkSDKDir
VS2010有不同的变量吗?如果没有,我该如何修改它以同时使用 VS2010 和 VS2008 项目?
顺便说一句,我使用 win 2008 Server 32 位操作系统,IIS 7 进行开发。
c# - XmlSerializer 不使用由 sgen 创建的 XmlSerializers.dll
在我的 Visual Studio 2010 项目中,我使用以下 Post-Build 事件命令行来使用 sgen 创建 XmlSerializers.dll。
构建后事件:
我的项目是强命名的,所以使用相同的键来强命名“XmlSerializers.dll”。VS 在输出文件夹中创建 XmlSerializers.dll。
但是,我注意到使用 ProcessMonitor,.NET 仍然在运行时调用 CSC.exe。我遇到了这篇文章,用户有类似的问题并通过使用 XmlSerializer(Type) 构造函数解决。
我在代码中使用了相同的技术,但它仍然调用 csc.exe:
由于性能原因,我需要使用预编译的 XML 序列化,而且我有时会在 Windows 关闭时看到 csc.exe 错误。我的应用程序在 Form 关闭时保存数据,在关机期间它失败了,因为 Windows 不允许在关机序列期间启动新进程。我已经看到通过预编译 XML 序列化来解决这个问题的建议。
关于为什么 XmlSerializer 不使用由 sgen 创建的 XmlSerializers.dll 的任何建议?
谢谢。