C#编译器:仅预处理

| 我计划将SubSpec(xUnit的一个小的BDD扩展名,适合于<600行)作为一个.cs文件而不是一个完整的dll分发。 SubSpec具有Silverlight和.NET风格,非常理想的是通过将单个Spec通过CSC预处理器拉出来从单个主文件构建发行版本。 “发行版”是指创建单个cs文件(不会有二进制发行版)。版本控制将由NuGet处理。 我知道C#编译器没有单独的预处理器(相反,它已集成到管道中)。还有其他可以代替CSC使用的编译器/工具吗?     
已邀请:
您的
tools/install.ps1
可以对C#文件执行所需的操作,因为它正在被“安装”,因此可以在包含过程中对其进行处理-可以通过在多行字符串中使用嵌入式
$(x)
$(expression)
项来进行有条件地扩展(可能有一组
function
扩展为C#代码作为
[string]
构成表达式的组成部分),即进行模板化,也可以通过一些
-replace
来传递
Get-Content
。 (您可能还会看到使用T4的人的例子,但是如果NuGet是送货卡车,则不要使用它是可耻的。如果您喜欢冒险,可以做一个真正的解析器(或者只是一个穷人的解析器)也在那里。 另一种方法可能是使用
partial
类,并将right8ѭ插槽放到主定制文件旁边的右侧定制程序文件中。 否则,您可能还没有尽力使用这样的技巧来优化您的9英镑,以使自己重返赛场。     
您始终可以通过
cl /E /P
通过C ++预处理器运行它,并且已经保证可以(几乎)在每次VS安装中都安装它。不过,这是一个很老套的技巧:)
// SubSpec.cs
// Bla bla license stuff

#include \"File1.cs\"  // This gets read by the C++ preprocessor
#include \"File2.cs\"  // and expanded out
#include \"File3.cs\"
    
为什么不将.cs文件仅添加到需要的项目中呢? 如果要从公共位置引用文件,则可以手动编辑.csproj文件以使用绝对(或相对)路径,而不是在项目目录中使用该路径。     

要回复问题请先登录注册