MSBuild не компилируется с / p: Configuration = Release и -p: Configuration = Debug - PullRequest
0 голосов
/ 09 мая 2019

Мы пытаемся установить чистую сборку новейшей версии Kentico (12) на Azure, используя Kudu, в конфигурации DEBUG.Мы традиционно достигаем этого, устанавливая SCM_BUILD_ARGS в -p:Configuration=Debug, и все хорошо.Но по какой-то причине в этой более новой версии проект не удается скомпилировать, и я вижу, что эта команда выполняется:

"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" "C:\Users\User\Documents\GitHub\Project\CMS\CMSApp.csproj" /nologo /verbosity:m /t:Build /t:pipelinePreDeployCopyAllFilesToOneFolder /p:_PackageTempDir="C:\local\Temp\8d6d315018f5ff9";AutoParameterizationWebConfigConnectionStrings=false;Configuration=Release;UseSharedCompilation=false /p:SolutionDir="C:\Users\User\Documents\GitHub\Project\.\\" -p:Configuration=Debug

Обратите внимание на Configuration = Release и Конфигурация = Debug .Ошибки компиляции - это что-то вроде Invalid expression term 'string' в следующей строке кода:

bool licenseOK = LicenseHelper.CheckLicenseLimitations(FeatureEnum.Ecommerce, out int skuCount, out int maxSKUCount);

Это вообще не выделяется в Visual Studio в Debug или Release Режим.Я также могу воспроизводить локально (как показано в моих путях выше), и если я изменяю две конфигурации на обе одинаковые (независимо от того, выберу ли я Отладка или Выпуск), он прекрасно компилируется.

Что я могу сделать, так это создать свой собственный файл сценария команды развертывания в качестве обходного пути, но, думаю, я не понимаю, почему вышеуказанная команда MSBUILD не работает с самого начала.

Любойидеи о том, почему это будет работать отлично для всех моих проектов ASP.NET до этого?Единственное, что я знаю, это то, что недавно в Kentico был включен компилятор Roslyn, с которым я, к сожалению, не очень знаком - может ли это быть частью проблемы?

UPDATE # 1 : Похоже, всеошибки компиляции связаны с кодом, который действителен только в C # 7.0.Это может быть ключом.

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Как упоминает Кит, это была проблема совместимости с C # 7.0, которую использует Kentico 12. Этот поток SO упоминает, что вам нужно запустить MSBuild версии 15 для кода C # 7.0.Я выполнил аналогичную команду отладки для моего локального проекта Kentico 12 с использованием MSBuild 15, и она прошла успешно.

0 голосов
/ 09 мая 2019

Все это сводилось к тому, что более новые версии Kentico имели код, который был действителен только в C # 7, и требовал MSBuild 15 для компиляции.Вот как я смог настроить Kudu:

  1. Добавить файл с именем .deployment в корень моего репо, содержащий только содержимое ниже.Это говорит Kudu использовать пользовательский сценарий развертывания.

  2. Загрузите файл deploy.cmd из моей службы приложений Azure через FTP в корневой каталог моего репозитория и обновите его для https://github.com/projectkudu/kudu/issues/2350#issuecomment-373817740 для использования пути MSBuild 15.Подробности ниже.

.defloyment содержимого файла

[config]
command = deploy.cmd 

deploy.cmd updates

1 - Добавить -MSBuildPath "%MSBUILD_15_DIR%" к вызову nuget.Пример:

nuget.exe restore "{your .sln file path}" -MSBuildPath "%MSBUILD_15_DIR%"

2 - Заменить %MSBUILD_PATH% на %MSBUILD_15_DIR%\MSBuild.exe в обоих случаях в шаге 2. Build to the temporary path

Это было все, что было необходимо для того, чтобыполучить сборку для завершения.

...