【问题标题】:Too long command line for sgen.exesgen.exe 的命令行太长
【发布时间】:2018-11-25 01:45:53
【问题描述】:

我有一个包含很多 nuget 包的 .net 4.5 项目,我将其升级到 4.7.2。为了解决软件包的一些特定更新问题(如packages.config 中的requireReinstallation="true"),我升级了相关软件包。现在我已经升级了包和一些新的包,比如

`<package id="System.AppContext" version="4.1.0" targetFramework="net472" />`
........(some other)
<package id="System.Xml.ReaderWriter" version="4.0.11" targetFramework="net472" />

此时,我可以构建它,但是当我尝试使用 Generate serialization assembly 选项来构建它时,我在 teamcity(和本地)中遇到了一个错误,比如

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\sgen.exe /assembly:C:\buildAgent\work\6b1c1da90609c252\Site\obj\TeamCity\Site.dll /proxytypes 
/reference:C:\buildAgent\work\6b1c1da90609c252\packages\AjaxMin.4.48.4489.28432\lib\net20\AjaxMin.dll

[SGen] C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\bin\Microsoft.Common.CurrentVersion.targets(3463, 5): warning MSB6002: The command-line for the "SGen" task is too long. Command-lines longer than 32000 characters are likely to fail. Try reducing the length of the command-line by breaking down the call to "SGen" into multiple calls with fewer parameters per call.

[SGen] C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\bin\Microsoft.Common.CurrentVersion.targets(3463, 5): error MSB6003: The specified task executable "sgen.exe" could not be run. The filename or extension is too long

当然我可以禁用Generate serialization assembly,但我不想。 我认为命令行中参数过多的问题。我升级项目后,依赖的总数达到了极限。

我该如何解决这个问题? breaking down the call to "SGen" into multiple calls with fewer parameters per call(怎么做?)或者别的什么

【问题讨论】:

  • 你能找到实际的命令行参数吗?超出限制了吗?
  • @kennyzx 是的,他超出了限制(~38k 个符号)
  • 我在我的项目中发现了一些旧的和未使用的代码。它是 WebRereferense->... *..wsdl 和其他一些类型。我删除了类型,现在 sgen.exe 根本不生成 ProjectName.XmlSerializers.dll。所以我决定在那一刻不在我的项目中使用Generate serialization assemblysgen。但无论如何,我很高兴听到如何解决 sgen 参数字符串过长的问题。

标签: c# build nuget sgen packages.config


【解决方案1】:

我认为没有简单的解决方案。 sgen 不支持 RSP 文件。

我建议评估命令行(例如,来自 msbuild 日志) - 引用数量 (args) 和文件路径长度可能无法很好地协同工作。尝试通过使用更少的引用或尽可能使用更短的文件路径来重组您的项目以适应限制(32K 字符)。

【讨论】:

    【解决方案2】:

    当您在 Visual Studio 中构建 C# 项目并收到错误错误 MSB6003 无法运行指定的任务可执行文件“sgen.exe”。 System.ComponentModel.Win32Exception (0x80004005):文件名或扩展名太长,您可以通过转到 C# 项目的属性来修复它,然后在“生成”选项卡上将“生成序列化程序集”设置为关闭。

    将此设置应用于调试和发布配置,否则它在本地工作(调试),但在您的构建服务器上失败(发布)。

    有关该工具的详细信息,请参阅 XML 序列化程序生成器工具 (Sgen.exe)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      相关资源
      最近更新 更多