问题标签 [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.
c# - SGEN XMLSerializer - 是否应将 .XMLSerializers.dll 添加为对当前项目或 GAC 的引用?
我用 XMLSerializer 类做一些事情。像大多数初学者一样,我在应用启动时遇到性能问题。我阅读了很多博客、文章,最后使用了 SGEN 工具。现在性能看起来还不错,但对我来说仍然有几件事不清楚。
1)我应该像这样使用 SGEN 语法:
或者它就足够了(我目前使用这种语法,我的程序集中只有一个 Serializable 类):
/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 一起部署就足够了,还是我应该在我的代码中添加一些东西?
我不这么认为,但我想确保我不必更改我的代码并且“魔法”会自动发生。
.net - MSBuild 在编译解决方案时找不到 SGen
我在这里查看了其他几个与 SGen 相关的问题,要么他们的答案不适用,要么他们的答案没有为我解决这个问题。我已经安装了几个 SDK 来解决这个问题,但没有运气。不应更改引用类型,因为这是唯一存在问题的地方。曾经的建议是将 SGen.exe 放入C:\Windows\Microsoft.NET\Framework\v3.5
文件夹中,但在没有问题的盒子上没有这样做。在这种情况下,SGen.exe
它确实存在并且就在它应该在的地方,但是 MSBuild 仍然因为某种原因无法找到它!
背景:
我们有一个自动化构建的 NAnt 脚本。在这种情况下,NAnt 正在调用 MSBuild,而 MSBuild 正在生成声称无法找到 SGen 的错误。该项目基于 .NET 3.5。我有我的主要开发环境(64 位 Vista Ultimate),其中脚本运行良好,我试图在 VM 中复制它(64 位 Win 7 Ultimate)。我认为我拥有一切都应该可以使用的东西,但这在 Win7 机器上失败了(在 Vista 机器上完美运行)。
我在这两个盒子之间做了一些比较,它们在这方面看起来都一样,但仍然失败。例如,两台机器上的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
'sdkInstallRootv2.0
值都设置为。C:\Program Files\Microsoft.NET\SDK\v2.0 64bit\
在两台机器上,SGen.exe
都在该路径的bin
子目录中。
NAnt 脚本:
我得到的错误信息是这样的:
我在这里做错了什么导致MSBuild仍然无法找到SGen?
.net - 哪些类型的事情会导致 sgen msbuild 任务因访问冲突而间歇性失败?
在我们项目的 MSBuild 文件中,我们生成了一个包含在 xml 序列化期间使用的类的程序集。这些类是通过 xsd.exe 生成的。
我们使用以下 SGen 任务配置。
在我们的构建服务器上执行 msbuild 脚本时,会间歇性地抛出以下错误。最初这个错误可能在每 50 个 (CI) 构建中发生一次,最近频率一直在增加,现在每 10 个构建中可能会发生 5-6 个。
正在生成的程序集的大小约为 410k(大约 35,000 行生成的代码),成功时序列化程序集的大小约为 1.7M。
失败时,输出如下:
我们使用 Hudson 来管理我们的构建,因此 msbuild 和 sgen 进程因此由 Hudson.exe 生成。
互联网上没有太多关于 SGen 的此类错误的信息。当然没有什么具体的。
visual-studio-2010 - 从VS2008升级到VS2010后SGEN不工作
我最近刚刚将 VS2008/.NET 3.5 SP1 项目升级到 VS2010 和 .NET 4。我有一个构建后事件,它调用 SGEN 来生成 XmlSerializers 程序集。
每当我尝试运行它时,都会出现以下错误。
我从命令行运行 SGEN 时遇到同样的错误,但我无法弄清楚问题所在。有任何想法吗?
visual-studio-2010 - 如何在 Msbuild 中将 SGEN 工具路径设置为目标 3.5 框架
我刚刚将一个项目从 VS2008 升级到 VS2010,但我仍然针对 3.5 框架。
在我的项目文件中,我有一个自定义任务来运行 SGEN 以生成我的 XmlSerializers.dll。然而,正在运行的 sgen 版本以 4.0 框架为目标。结果,当我运行我的应用程序时,我收到错误消息:
“无法加载文件或程序集'XXXX.XXXX.XmlSerializers'或其依赖项之一。此程序集由比当前加载的运行时更新的运行时构建,无法加载。”
Sgen 任务如下所示:
有ToolPath="$(SGenToolPath)"。如何让它运行以 3.5 为目标的版本?
这里有一个类似的问题,但对我没有多大帮助。
visual-studio-2010 - VSTS 2010 SGEN:错误:无法加载文件或程序集(HRESULT 异常:0x80131515)
我在使用 VS2010 时遇到了一个奇怪的问题。我们使用 TFS 来构建我们的 API dll,并且我们过去常常在我们的项目中引用它们,使用完全信任的映射网络驱动器。我们已经这样工作了至少两年,一切都很顺利。
今天,我将一个 webapp 转换为 vs2010,当我在 Release 中编译它时,它给了我:
SGEN:错误:无法加载文件或程序集 'file:///L:\Api\Release API_20100521.1\Release\CS.API.Exceptions.dll' 或其依赖项之一。不支持操作。(来自 HRESULT 的异常:0x80131515)
奇怪的是,当它在调试配置文件下时它正在工作......
我尝试添加
进入 app.config 仍然没有运气(请参阅http://social.msdn.microsoft.com/Forums/en/msbuild/thread/d12f6301-85bf-4b9e-8e34-a06398a60df0和http://msdn.microsoft.com/ en-us/library/dd409252(VS.100).aspx )
我很确定这个问题来自 Visual Studio 或 msbuild,因为我们的代码在 prod 中不会从网络共享运行,因为所有引用的 dll 都被复制到 bin 文件夹中。
如果有人有解决方案(或只是搜索路径的想法),请告诉我!
编辑:事实证明它在调试模式下工作,因为序列化程序集的生成已关闭。正如标题所说,这确实是一个 SGEN 问题,因为正是这个实用程序说该路径不受信任......
c# - 如何强制 Sgen 创建 .net 3.5 序列化程序程序集
我的 .NET 3.5 库中有一个 sgen 构建步骤。在 VS2010 中,这会生成 .NET 4 MyLib.XmlSerializers.dll,无法从 .NET 3.5 应用程序加载。有谁知道如何更改构建步骤以获得正确版本的程序集?是否可以将 IL 序列化程序程序集和库合并到单个 dll 中?
这是我的 sgen 构建步骤:
谢谢
编辑:我在这里找到了同样的问题,但我会等待一段时间,看看是否有人有更好的解决方案。
sql-server - 加载使用 sgen 实用程序创建的 XMLSerializer 时“创建程序集”期间 SQL Server“版本、区域性或公钥不匹配”
我正在尝试在 SQLServer 中创建一个调用 Web 服务的 CLR 函数。当我创建第一个程序集时,AssemblyInfo.cs 中的 AssemblyVersion 是 1.0.*。我将运行 sgen 来创建随附的 XMLSerializers 程序集,我没有看到任何问题。
在 SQLServer 中,第一个程序集加载正常,但尝试加载 XMLSerializers 程序集时出现以下错误:
我不知道为什么它试图引用版本 0.0.0.0。这确实是错误的原因吗?如果是,为什么 XMLSerializers 程序集引用了错误的版本号?
visual-studio-2010 - VS.NET 2010/MSBUILD 能否为 .NET 3.5 SP1 生成 XmlSerializer?
我刚刚将包含 WinForms、通用库和 Web 应用程序的 VS 2008 解决方案升级到 VS 2010,但所有项目仍以 .NET 3.5 SP 1 为目标。我使用这种技术为我的通用库生成 XmlSerializer。WinForms 应用程序运行良好。当我的 Web 应用程序尝试使用这些引用相同 XmlSerializer 的库运行时,它会抛出以下内容:
“/WebSubscribers”应用程序中的服务器错误。无法加载文件或程序集“Ceoimage.Basecamp.XmlSerializers”或其依赖项之一。此程序集由比当前加载的运行时更新的运行时构建,无法加载。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.BadImageFormatException:无法加载文件或程序集“Ceoimage.Basecamp.XmlSerializers”或其依赖项之一。此程序集由比当前加载的运行时更新的运行时构建,无法加载。
我使用.NET Reflector查看了 XmlSerializer 的引用,发现它引用了 .NET Reflector 的 2.0 和 4.0 版本mscorlib
以及System.Data.Linq
. 奇怪的是,它只使用了 4.0 版本的System.Xml
. 那可能是我的问题。
如何使用这些 XmlSerializer 让 Web 应用程序运行?当我简单地删除那些 XmlSerializer 时,Web 应用程序运行良好。这是一个选项,但如何强制 MSBUILD 为特定版本的 CLR 创建序列化程序?
这是我添加到项目文件中的 MSBuild 任务,它强制创建 XmlSerializer:
c# - 即使在我的服务类上使用 sgen 仍然会导致构造函数异常缓慢
所以我正在努力加快我们的应用程序启动时间——而且我已经确定了一个需要解决的主要瓶颈。我们的每个 web 服务客户端类都需要永远和一天的时间来实例化。一些调查显示这完全是由于运行 GenerateXMLMappings 的 SoapHttpClientProtocol。我开始搜索这方面的信息,发现这个 SO post Slow SoapHttpClientProtocol constructor
我已经准备好吹响号角了,因为我的问题反映了信中所说的内容。我经历了第一篇文章中列出的每个步骤,使用 sgen 预生成序列化程序 dll,然后从代码中删除各种标签并将其构建到我在应用程序中作为普通参考引用的普通 dll(相反到网络参考)。然而,毕竟这一切,我在分析应用程序时没有看到任何区别。作为 SoapHttpClientProtocol 构造函数的一部分,GenerateXMLMappings 仍然花费了大量时间。
我已经验证它实际上是在使用我的自定义 web 服务客户端 dll。我还验证了它至少在寻找 XmlSerializers dll(如果我不包含该文件,我可以看到一个 filenotfound 被吐出)。
有没有人有关于 SoapHttpClientProtocol 构造函数如何决定它需要做什么的详细信息?这是一个非常令人沮丧的问题,因为整个过程似乎是黑盒的,没有好的方法可以看到内部实际发生的事情。
在此先感谢您的帮助-我对此完全靠墙。