Это проект 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