C#编译器:仅预处理

时间:2011-04-13 07:00:05

标签: c# c-preprocessor

我计划将SubSpec(适用于< 600行的xUnit的小BDD扩展名)作为单个.cs文件而不是完整的dll分发。

SubSpec具有Silverlight和.NET风格,通过将其拉入CSC预处理器,从单个主文件构建SubSpec的发行版本将是理想的选择。通过“发布版本”,我的意思是创建单个cs文件(不会有二进制版本)。版本控制将由NuGet处理。

据我所知,C#编译器没有单独的预处理器(而是集成到管道中)。是否有其他编译器/工具可以代替CSC使用?

3 个答案:

答案 0 :(得分:4)

您总是可以通过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"

答案 1 :(得分:1)

您的tools/install.ps1可以对C#文件执行所需的操作,因为它正在“安装”,因此可以在包含期间处理它 - 可以使用嵌入式$(x)$(expression)多行字符串中的项有条件地扩展(可能通过一组function扩展为C#代码,形成表达式的[string],即模板,或者你可以管道Get-Content-replacepartial。 (你可能会看到人们使用T4的例子,但如果NuGet是送货卡车,不使用它是一种耻辱。如果你有冒险精神,你可以做一个真正的解析器(或者只是一个可怜的人也在那里。

另一种方法可能是使用install.ps1类,并将右侧自定义文件中的{{1}}位置放在主要位置旁边。

或者你只是没有用optimise out your #ifdef SILVERLIGHTs努力tricks like this to get back on your horse

答案 2 :(得分:0)

为什么不将.cs文件添加到需要它的项目中?

如果要从公共位置引用该文件,则可以手动编辑.csproj文件以使用绝对(或相对)路径,而不是使用项目目录中的路径。