Вы можете использовать препроцессор C (например, mcpp) и вставить его в файл .csproj. Затем вы изменяете «действие сборки» в вашем исходном файле из Compile в Preprocess или как вы его называете.
Просто добавьте BeforBuild к вашему .csproj так:
<Target Name="BeforeBuild" Inputs="@(Preprocess)" Outputs="@(Preprocess->'%(Filename)_P.cs')">
<Exec Command="..\Bin\cpp.exe @(Preprocess) -P -o %(RelativeDir)%(Filename)_P.cs" />
<CreateItem Include="@(Preprocess->'%(RelativeDir)%(Filename)_P.cs')">
<Output TaskParameter="Include" ItemName="Compile" />
</CreateItem>
Возможно, вам придется вручную изменить Compile на Preprocess хотя бы для одного файла (в текстовом редакторе) - тогда опция «Preprocess» будет доступна для выбора в Visual Studio.
Я знаю, что макросы сильно злоупотребляют и злоупотребляют, но их полное удаление одинаково плохо, если не хуже. Классическим примером использования макроса будет NotifyPropertyChanged . Каждый программист, которому приходилось тысячи раз переписывать этот код, знает, как больно без макросов.