2011-04-13 109 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