msbuild не работает на препроцессорах - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть пара проектов в одном решении.Один проект (project_UWP) является проектом запуска, который зависит от других проектов.Построение решения и запуск project_UWP прекрасно работает в Visual Studio.

Однако в решении есть один проект, назовем его 3dParty_Project, который содержит файл 3dParty_Helper.cs.Я не могу поделиться файлом (юридические причины), но этот файл содержит много частей, таких как:

#if !Xamarin
// Do stuff..
#else
// Do some other stuff
#endif

Как я уже говорил ранее, если я собираю project_UWP, который зависит от 3dParty_Project всех зависимостей вРешение успешно построено, и я могу запустить свое приложение.На моем сервере сборки я использую MSBuild.

msbuild project_UWP.csproj /t:clean;build /p:RunCodeAnalysis=False /maxcpucount:1

В этом случае я получаю сообщение об ошибке 3dParty_Helper.cs:

... ошибка CS1513:} ожидается...

Поскольку проекты хорошо построены в Visual Studio, я подозреваю, что msbuild каким-то образом перезаписывает «условные символы компиляции» для проектов зависимостей при сборке.Я использую msbuild из:

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ 15.0 \ Bin \ MSBuild.exe

Символы компиляции в project_UWP:

NETFX_CORE; WINDOWS_UWP; CODE_ANALYSIS

Символами компиляции в 3dParty_Project являются:

XForms; Xamarin

Я предполагаю, что символы ошибки являются источником ошибки, потому что, глядя на 3dParty_Helper.cs, я не вижу частей, где отсутствует }.Вот почему я думаю, что в какой-то момент возникает проблема с такими деталями, как:

#if WPF || Android || IOS || WF
if (/* stuff */)
{
    // do stuff
}
else if (/* other stuff */)
#endif
    // define stuff
#if !WinRT && !XForms
else
    // Do some magic
#endif

Как я могу подойти к этой проблеме?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...