Как быстро обработать файл csproj в c# - PullRequest
0 голосов
/ 14 февраля 2020

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

что я имею в виду, если у меня есть csproj, который добавляет несколько директив препроцессора, если в сборке DEBUG и другие в сборке RELEASE, Я хочу, чтобы у меня была возможность обработать файл так, чтобы при сборке DEBUG я правильно получал все тогда определенные препроцессоры и аналогично для сборки RELEASE.

Я собираюсь обрабатывать основные проекты tnet в уточняйте c.

1 Ответ

1 голос
/ 17 февраля 2020

Я хочу получить состояние файла после обработки всех условий с использованием платформы и конфигурации. это включает в себя такие вещи, как OutputPath, AllowUnsafe, BuildTargets и т. для компилятора типа PreprocessorDefinitions.

В качестве рекомендации вы можете попытаться добавить пользовательский target в xxxx.csproj файл для выполнения некоторой задачи msbuild для выполнения некоторой предварительной обработки. И вы хотите сделать все это после цели pre-build, вы можете просто установить AfterTargets="PrepareForBuild" для этой пользовательской цели, что означает, что она будет выполняться после цели PrepareForBuild.

Предложения

Точно так же:

<Target Name="CustomPreprocessor" AfterTargets="PrepareForBuild">

<Message Importance="high" Text="$(OutputPath)--$(AllowUnsafeBlocks)--$(PrepareForBuildDependsOn)" ></Message>

 ........//other msbuild task

 </Target>

1) Если вы хотите использовать конфигурацию в качестве условия и выполнять различные предварительные инструкции в соответствии с Debug или Release, вы можете использовать MSBuild условия . Если вы хотите использовать Debug, вы можете обратиться к этому:

<Target Name="CustomPreprocessor" AfterTargets="PrepareForBuild" Condition=" '$(Configuration)' == 'Debug' ">

В то же время, если вы также хотите добавить palform в качестве параллельного условия, попробуйте это :

 <Target Name="CustomPreprocessor" AfterTargets="PrepareForBuild" Condition=" '$(Configuration)' == 'Debug' and '$(Platform)' =='Any CPU' ">

2) Поскольку outputpath и AllowUnsafe являются свойствами MSBuild, вы можете использовать $(outputpath) и $(AllowUnsafeBlocks), чтобы получить их значения, тогда как вы можете использовать @(...) чтобы получить значения элементов MSBuild .

3) В основном, чтобы выполнить прединструкцию в target, вы можете сделать это с помощью задачи, вы можете обратиться к этот документ для добавления любой задачи, как вы хотите выполнить любую операцию.

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