Выражение ошибки компиляции C # слишком длинное или сложное для компиляции - PullRequest
0 голосов
/ 11 апреля 2019

Это проект C # с .NET 4.6.1, и мы создавали его, вызывая MSBuild.exe, который поставляется с .NET 4.6.1. Код, который успешно компилировался с использованием C # compiler csc.exe, версия которого ниже -

  C:\Windows\Microsoft.NET\Framework\v4.0.30319>csc.exe /version
Microsoft (R) Visual C# Compiler version 4.6.1055.0
for Microsoft (R) .NET Framework 4.5
Copyright (C) Microsoft Corporation. All rights reserved.

Из-за определенных неизбежных инфраструктурных политик мы должны построить этот проект на другом компьютере. Новая сборочная машина использует более старую версию компилятора csc.exe, показанную ниже -

E:\....\BuildTools\MSBuild\15.0\Bin\Roslyn>csc.exe /version
2.9.0.63208 (958f2354)

Однако, несколько файлов cs (C #) не проходят компиляцию, что приводит к ошибке с более старой версией компилятора csc.exe -

 SysimageServiceSerializer.cs(13475,151): error CS8078: An expression is too long or complex to compile

Я понимаю причину этой ошибки, которая вызвана тем, что компилятору не хватает места, и решение будет упрощать код. Однако это может привести к большим изменениям кода. Я думаю, есть ли способ решить эту проблему без внесения изменений в код.

Я увидел эту ссылку https://www.grapecity.com/en/forums/spread-archive/error-an-expression-is-too и попробовал указанную там опцию, чтобы добавить тег ниже в файле csproj

<UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>

Также попытался вызвать MSBuild с парой дополнительных аргументов / t: rebuild и / maxcpucount: 20. Но все равно не повезло.

Любая идея, как решить эту проблему без изменений кода, она была скомпилирована ранее, как упоминалось выше, но потерпела неудачу, когда мы используем старую версию csc.exe

...