1

我有一个包含很多 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选项来构建它时,我在 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(如何?)或其他

4

2 回答 2

2

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

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

于 2018-06-15T23:28:27.897 回答
0

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

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

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

于 2021-04-06T08:11:39.297 回答