2011-04-13 71 views
1

我计划分发SubSpec(一个小的BDD扩展的xUnit配合到< 600线),为单一的.cs文件,而不是一个完全成熟的DLL。C#编译器:预处理只有

SubSpec有Silverlight和.NET的味道,这将是理想的通过CSC的预处理拉,从一个单一的主文件建立SubSpec的发行版本。通过“发布版本”,我的意思是创建单个cs文件(将不会有二进制版本)。版本控制将由NuGet处理。

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

回答

1

tools/install.ps1可以做,因为它是被“安装”,因此它可以包含在处理它什么就是了C#文件 - 这可以通过在有条件展开多行字符串使用嵌入$(x)$(expression)项目是(可能由具有一组function s表示扩展到C#代码作为[string] S中的表达的形成组分),即,模板,或可以通过管道的Get-Content通过一些-replace秒。 (你可能会看到使用T4的人的例子,但是如果NuGet是送货卡车,那么不要使用它,如果你觉得冒险,你可以做一个真正的解析器(或者只是一个穷人的一个)在那里了。

另一种方法可以是使用partial类,让主一个右旁的customiser文件install.ps1插槽。

否则你只是还没有尝试使用够硬optimise out your #ifdef SILVERLIGHTstricks like this to get back on your horse

4

你总是可以刚刚经历C++预处理器通过cl /E /P运行它,你已经保证有它安装在(几乎)所有的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" 
+0

听起来像是一个好主意,我会尝试一下,我不想做包括(尽管它打开了几个选项......),只想创建一个没有SI的单个cs文件LVERLIGHT条件(减少膨胀,让我接近魔术500线)。 – 2011-04-13 07:19:53

+0

+1尼斯黑客,但很多人试图挽救几百megs所以不是一个伟大的假设(我知道你知道的) – 2011-04-13 23:21:53

0

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

如果你想从一个共同的位置参考的文件,那么你可以手动编辑的,而不是使用一个在项目目录中的.csproj文件使用绝对(或相对)路径。

+0

对不起,也许我不够清楚。通过“发布版本”,我的意思是创建单个cs文件(将不会有二进制版本)。版本控制将由NuGet处理。 – 2011-04-13 07:17:48