sgen.exe的命令行太长

时间:2018-06-15 08:27:39

标签: c# build nuget sgen packages.config

我有一个带有大量nuget包的.net 4.5项目,我将其升级到4.7.2。要解决程序包的某些特定更新问题(例如requireReinstallation="true"中的packages.config),我升级了相关的程序包。现在我已经升级了包和一些新的包,比如

`<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选项时,我在团队城市(和本地)中遇到错误,如

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(如何?)或其他

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

有关该工具的更多信息,请参阅 XML Serializer Generator Tool (Sgen.exe)。