我不会说这是否是一个好主意,因为我对你想要做的事情知之甚少。不过,我建议这样做:您建议的是在构建过程中将某种“扩展 C#”源代码文件转换为常规 cs。
就个人而言,我首先要摆脱“扩展” C# 语言的想法来澄清这一点。相反,我会将其视为定义一种恰好在语法上类似于 C# 的新语言(我假设)。使用不同的文件扩展名,以便 Visual Studio 不会尝试将您的语言编译为 C#。(也许是 .csx?人们喜欢添加字母 x,对吧?)
Visual Studio 已经以其他可能不那么明显的方式完成了这类事情。如果将资源文件添加到项目中,Visual Studio 通常还会包含一个动态生成的“designer.cs”,其中包含基于 .resx 文件内容生成的代码。如果查看 .resx 文件的属性,您会注意到“自定义工具”属性的值为“ResXFileCodeGenerator”。理论上,您应该能够实现自己的生成器来执行您提到的翻译步骤。其实这个翻译不一定是你说的一次性的。翻译过程应生成一个新文件,但保持原始文件不变。对原始文件的任何更改都会导致 Visual Studio 重新生成自动生成的文件。
I've not tried to implement a custom generator myself, but I think these articles are relevant: Implementing Single File Generators, and Registering Single File Generators
Your .csproj file would contain something such as the following:
<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>
Where Example.csx is the source code file containing your extended syntax and Example.cs is the resulting output of translating Example.csx into normal C# code.