问题标签 [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 投票
1 回答
465 浏览

c# - SGEN 在公共泛型方法的 where 子句上失败

我有一个项目,其中 SGEN 用于预编译序列化程序集(没有 /proxytypes 标志)。在这个项目中,有一个到目前为止一直是内部的类(因此 sgen 将不理会它)。我需要公开课程,这样做的简单行为会导致 sgen 失败并出现错误:

'Infragistics.Shared.DisposableObject' 类型是在未引用的程序集中定义的......'

这个程序集确实被引用了,并且总是被引用,否则程序集本身将无法编译。版本也完全匹配,并且参考已关闭特定版本。

第一个令人困惑的部分是这个类没有公共状态(没有公共字段,根本没有属性),这并不使它成为序列化的良好候选者。

更令人困惑的部分是,删除唯一公共(通用)方法上的 where 子句允许 sgen 很好地处理程序集。

这是一个类,上面只有一个公共的、非显式实现的东西(接口实现了两个方法,不相关):

注意: UIElement 继承自 DisposableObject,是 sgen 失败时找不到的类型。请注意,当我注释掉 where 子句时,UIElement 仍在其他地方使用,但 sgen 并没有对此感到不满。标记 Support() 方法内部也允许 sgen 完成,因为它只关心公共的东西。

为什么 sgen 首先会关心非 Web 服务的公共方法?

为什么它只会因为 where 子句的存在而绊倒?

为什么在这种特殊情况下,sgen 没有找到明显存在的程序集?

0 投票
4 回答
1386 浏览

.net - 如何从序列化中排除特定类型?

sgen用一吨的类型来对抗我的程序集。我想从序列化中排除 2 种类型。我似乎无法找到一种方法来做到这一点。

我看到sgen有一个/type开关来指定特定类型,但没有排除特定类型。

有没有办法从序列化中排除特定类型?

0 投票
2 回答
2026 浏览

c# - XML Serializer Generator Tool (Sgen.exe) 生成 64 位 Windows DLL?

我正在 Visual Studio 2010 中构建一个 64 位 C# .NET DLL。我的项目的构建后步骤包括运行 sgen.exe 以为我的程序集生成相应的 XmlSerializer DLL。(我正在尝试将 CLR 函数加载到 SQL Server 2012 中。该函数执行一些 XML 序列化。)

有没有办法用任何版本的 sgen.exe 生成 64 位代码?或者是否有我应该安装的特定 Windows SDK?好像找不到下载地址。

0 投票
1 回答
471 浏览

.net - 在 64 位服务器上具有延迟签名的 SGEN

我正在尝试解决在构建服务器上作为我的 .NET 解决方案构建的一部分调用 SGEN 时引发错误的问题。我正在从服务器上的命令行运行构建,以消除 CI 服务器作为一个因素。

提供的具体错误消息是:

SGEN:错误:无法加载文件或程序集“MyAssembly.dll,版本=0.0.0.0,Culture=neutral,PublicKeyToken=56e8273d901d717f”或其依赖项之一。强名称验证失败。(来自 HRESTULT 的异常:0x013141A)

从命令行运行构建脚本不会产生其他错误。

有问题的程序集是延迟签名程序集,使用与指定令牌匹配的公钥构建。

在服务器上,我使用 sn.exe 工具 ( *,56e8273d901d717f) 注册了用于跳过验证的密钥令牌,因为这是在尝试完整签名阶段之前运行构建过程的一些测试步骤所必需的。

构建过程在开发人员桌面和 Win2K3 服务器上成功运行。我在一个新的 Win2k8R2 服务器上运行这些测试,这是为了替换旧的盒子。

0 投票
0 回答
969 浏览

c# - sgen.exe 和 Oracle.DataAccess.dll 的问题 (Visual Studio 2012)

我们尝试将我们的 Web 服务项目从 Visual Studio 2010 迁移到 Visual Studio 2012。该项目使用 Oracle.DataAccess.dll(v 11.2.0.3 32 和 64 位),我们使用 sgen.exe 创建 *.XmlSerializers.dll。

sgen.exe 始终无法为包含 Oracle.DataAccess.dll 的项目创建 XmlSerailizer.dll。我们需要将解决方案构建为 AnyCPU。

我们收到的错误消息如下: SGEN : error : 尝试加载格式不正确的程序集:c:\oracle\x64\product\11.2.0\client_1\ODP.NET\bin\4\Oracle .DataAccess.dll。

即使仅并行安装 Visual Studio 2010 和 2012,也无法在任一工作室中构建 Webservice 项目。

到目前为止,我们所有试图找到解决问题的方法都失败了。有没有人有类似的星座并找到了解决问题的方法?

0 投票
1 回答
511 浏览

c# - SGen 不使用父程序集中的 FileVersion

似乎 SGen 不使用父程序集中的文件版本,而是使用 AssemblyVersion。如果您想保持强名称不变并通过 MSI API 兼容补丁发布,这是有问题的。

例如,如果添加了新数据类型,则需要在目标机器上修补生成的 XmlSerializers 程序集。但是 MSI 只查看文件版本(相等)并且什么都不做。

有没有办法指示 SGen 使用源程序集中的文件版本?

例子:

源程序集:

生成的序列化程序程序集将在 PE Header for File 和 Product Version 中获得 2.0.0.0。这是错误的。

作为最后的手段,我会考虑修补生成的程序集的文件版本,但我确实担心如果程序集是强命名的,它将不再加载(尚未尝试过),因为至少以前的 .NET 版本确实创建了包含PE头的完整文件。

0 投票
4 回答
15827 浏览

visual-studio-2008 - SGEN 失败:试图在 VS2008 中加载格式不正确的程序集

我能够找到几个类似的问题被问和回答,但没有一个答案或确切的条件适用于我的情况。

  1. 我有一个为 x64 构建的 .NET 3.5 项目。
  2. 我还有一个 x64 混合模式参考(也针对 .NET 3.5)。
  3. 在 Visual Studio 2008 中,我创建了一个 Web 引用,它使 SGEN 在发布构建期间执行以创建帮助程序 DLL。

如果我不引用mixed-mode DLL,这可以正常工作。如果我确实引用了混合模式 DLL,则会收到此错误(xxx 只是一个占位符):

SGEN:错误:尝试加载格式不正确的程序集:C:\code\xxx\trunk\xxx\common\xxx\build\winx64\lib\xxx.dll。

这是发出的命令:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sgen.exe /assembly:C:\code\xxx\trunk\xxx\xxx\obj\x64\Release\xxx.dll /proxytypes /reference: ..\common\xxx\build\winx64\lib\xxx.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.configuration.dll /reference:C:\Windows\Microsoft.NET \Framework\v2.0.50727\System.Configuration.Install.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:C:\ Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\ Framework\v2.0.50727\System.EnterpriseServices.dll /reference:C:\Windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\System.Runtime.Serialization.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\ System.ServiceModel.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Web.Extensions.dll" /reference:C:\Windows\Microsoft.NET\ Framework\v2.0.50727\System.Web.Services.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll/reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.Services.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll/reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.Services.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll

有任何想法吗?

0 投票
1 回答
1433 浏览

visual-studio-2010 - 哪些 MSBuild 任务会发起对 SGen 的调用?

我继承了一个复杂的 MSBuild 脚本,它可以构建和部署多个解决方案。当我运行脚本时,我在日志中看到以下错误:

SGEN:无法生成序列化程序集 C:\B\268\Agents\Agents.XmlSerializers.dll,因为它已经存在。使用 /force 强制覆盖现有程序集。

我同意Agents.XmlSerializers.dll存在。我无法确定是哪个任务导致它被创建,以及哪个任务启动了重新创建它的尝试。

我在构建层次结构中的文件中搜索了“SGen”,但一无所获。所以我假设 SGen 被构建中的两个(或更多)任务隐式调用。

谁能指出什么叫 SGen?

谢谢。

0 投票
3 回答
6558 浏览

.net - sgen.exe 构建错误“无法加载一种或多种请求的类型”

我正在构建一个包含多个解决方案的解决方案。除了其中一个之外,所有这些都没有任何问题。有问题的发出以下消息:

错误 2 无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息。J:\MyPlugins\MyPlugin1\SGEN MyPlugin1

我在 Visual Studio 中打开详细输出,得到以下信息:C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sgen.exe /assembly:

我用 FusionLog 检查了输出,一切都正确加载。事实证明这是一个红鲱鱼。我决定在出现详细信息的情况下再次运行构建。我得到以下信息:

Microsoft (R) Xml 序列化支持实用程序 [Microsoft (R) .NET Framework,版本 4.0.30319.17929] 版权所有 (C) Microsoft Corporation。版权所有。如果您需要更多帮助,请输入“sgen /?”。SGEN:错误:无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息。该命令以代码 1 退出。完成执行任务“SGen”——失败。

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sgen.exe /assembly:":\MyPlugins\MyPlugin1.dll" /proxytypes /reference:"J:\MyPlugins\ MyPlugin1\packages\FluentValidation.3.4.6.0\lib\Net40\FluentValidation.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\mscorlib.dll" /reference :"J:\MyPlugins\MyPlugin1\Libraries\Core\bin\Release\Core.dll" /reference:"J:\MyPlugins\MyPlugin1\Libraries\Services\bin\Release\Services.dll" /reference:"J: \MyPlugins\MyPlugin1\Presentation\Web.Framework\bin\Release\Web.Framework.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Core .dll”/参考:“C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Data.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4. 0\System.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.EnterpriseServices.dll" /reference:"C:\Program Files (x86) \Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Web.dll" /reference:"C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Web. Mvc.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Web.Services.dll" /reference:"C:\Program Files (x86) \参考程序集\Microsoft\Framework.NETFramework\v4.0\System.Xml.dll"

是什么导致了这个错误,我如何在不关闭 SGEN 的情况下修复它?仅供参考,我没有编写代码。

0 投票
2 回答
4048 浏览

c# - 为 dot.net Framework 4.0 / 2 安装 Windows SDK 7.1 的问题 1 中的问题

从昨天开始,我尝试在我的 Windows 7 x64 机器上安装适用于 dot.net Framework 4.0 的 Windows SDK 7.1。在安装过程中,我每次都会遇到相同的错误。

错误信息:

那是一条非常无用的错误消息,因此我浏览了 www 以了解更多信息,并按照人们推荐的建议步骤进行操作。我打开查看日志并得到与其他人相同的返回错误。

我尝试了 Microsoft、MSDN 和其他人推荐的所有东西,但对我没有用。

我试图解决问题的东西:

  • 卸载 Document Explorer(msdn 推荐)
  • 卸载最新的 Microsoft Visual C++ 2010 Redist x64/x86 版本 (microsoft)
  • 卸载 Microsoft Windows SDK Windows 7 (dot.net 3.5)
  • 安装 Microsoft Windows SDK 8

但就像我说的那样,没有任何帮助:/我在安装过程中每次都会收到相同的错误消息。

关于我的系统的其他事实:

  • 我的系统上有很多 Microsoft Visual C++ 2008 Redist 版本
  • Microsoft Visual C++ 编译器 2008 标准版 enu x64/x86
  • 适用于 Visual Studio 2008 的 Microsoft Windows SDK

背景资料:

我在我的机器 Windows 7 x64 上安装了 Jenkins 作为服务。我们进行了从 dot.net Framework 3.5 到 dot.net Framework 4.0 的转换。但问题是 sgen.exe 发送错误:

"SGEN : error : An attempt was made to load an assembly with an incorrect format.."(在构建日志中查找)。Windows SDK 在其 bin 文件夹中包含 sgen.exe,例如“C:\Program Files\Microsofft SDKs\Windows\v7.0\Bin”。所以我认为 SDK 已过时(v7.0a),我尝试为 dot.net Framework 4.0 安装 Windows SDK v7.1。可能在我的系统上安装最新的 Visual Studio 版本可能有助于解决问题,因为它应该同时安装 Windows SDK。

但我不想在上面安装 Visual Studio 以防止浪费许可证,因为没有人在这台计算机上工作。