Я не скажу, хорошая это идея или нет, поскольку я недостаточно знаю, что вы пытаетесь сделать.Я хотел бы предложить это, однако: То, что вы предлагаете, - это иметь какой-то файл с «расширенным C #» исходным кодом, который переводится в обычные cs во время процесса сборки.
Лично я бы пояснил это сначалаотказ от идеи, что вы «расширяете» язык C #;Вместо этого я бы подумал, что это определение нового языка, который синтаксически похож на C # (я полагаю).Используйте другое расширение файла, чтобы Visual Studio не пыталась скомпилировать ваш язык как C #.(Может быть .csx? Люди любят добавлять букву x, верно?)
Visual Studio уже делает подобные вещи другими способами, которые могут быть не столь очевидными.Если вы добавляете файл ресурса в проект, Visual Studio, как правило, также включает динамически генерируемый файл «designer.cs» с кодом, сгенерированным на основе содержимого вашего файла .resx.Если вы посмотрите на свойства файла .resx, вы заметите, что свойство «Custom Tool» имеет значение «ResXFileCodeGenerator».Теоретически вы должны иметь возможность реализовать свой собственный генератор для выполнения упомянутого вами шага перевода.На самом деле, этот перевод не должен быть разовым, как вы сказали.Процесс перевода должен генерировать новый файл, но оставить исходный файл без изменений.Любые изменения исходного файла приводят к тому, что Visual Studio регенерирует автоматически сгенерированный файл.
Я не пытался реализовать собственный генератор самостоятельно, но я думаю, что эти статьи актуальны: Реализация генераторов одного файла и Регистрация генераторов одного файла
Ваш файл .csproj будет содержать что-то вроде следующего:
<Content Include="Example.csx">
<Generator>ExtendedCSharpCodeGenerator</Generator>
<LastGenOutput>Example.cs</LastGenOutput>
</Content>
<Compile Include="Example.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Example.csx</DependentUpon>
</Compile>
Где Example.csx - исходный кодфайл, содержащий расширенный синтаксис и пример .cs, является результатом преобразования файла Example.csx в обычный код C #.