Слишком длинная командная строка для sgen.exe

У меня есть проект.net 4.5 с большим количеством пакетов nuget, и я обновил его до 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 (как?) или что-то еще

2 ответа

Я не думаю, что есть простое решение. sgen не поддерживает файлы RSP.

Я бы посоветовал оценить командную строку (например, из журналов msbuild) - количество ссылок (аргументов) и длина пути к файлу, вероятно, плохо работают вместе. Попробуйте реструктурировать свой проект так, чтобы он соответствовал ограничениям (32 тыс. Символов), используя меньше ссылок или по возможности более короткий путь к файлу.

Когда вы создаете проект C# в Visual Studio и получаете сообщение об ошибке Ошибка MSB6003 Не удалось запустить указанный исполняемый файл задачи «sgen.exe». System.ComponentModel.Win32Exception (0x80004005): имя файла или расширение слишком длинное, вы можете исправить это, перейдя в свойства проекта C# и на вкладке «Сборка» отключите параметр «Создать сборку сериализации».

Примените этот параметр как к конфигурации отладки, так и к конфигурации выпуска, в противном случае он работает локально (отладка), но не работает на вашем сервере сборки (выпуск).

См. XML-сериализатор Generator Tool (Sgen.exe) для получения дополнительной информации об этом инструменте.

Другие вопросы по тегам