2011-04-13 4 views
1

(xUnit 용 소형 BDD 확장 프로그램 (< 600 행))을 완전한 .dll 대신 단일 .cs 파일로 배포하려고합니다.C# 컴파일러 : 전처리 전용

SubSpec은 Silverlight와 .NET을 사용하기 때문에 CSS 전처리기를 통해 단일 마스터 파일에서 SubSpec의 릴리스 버전을 빌드하는 것이 이상적입니다. "release version"은 단일 cs 파일을 만드는 것을 의미합니다 (바이너리 릴리즈가 없음). 버전 관리는 NuGet에서 처리합니다.

C# 컴파일러에는 파이프 라인에 통합 된 대신 별도의 전 처리기가 없다는 것을 알고 있습니다. CSC 대신 사용할 수있는 다른 컴파일러/도구가 있습니까?

답변

1

귀하의 tools/install.ps1가 포함 동안 그것을 처리 할 수 ​​있도록이 '설치'되는 것으로는 C#을 파일에 원하는 것을 할 수있는 - 그 (조건부 확장 여러 줄 문자열에 포함 $(x) 또는 $(expression) 항목을 사용하여 중 하나가 될 수 C# 코드 인 function을 C# 코드로 확장하여 표현의 구성 요소를 형성하는 [string]) 즉, Get-Content-replace 개로 파이프 할 수 있습니다. (T4를 사용하는 사람들의 예를 보게 될지도 모르겠지만 NuGet이 배송 트럭 인 경우 사용하지 않는 것이 수치 스럽습니다. 모험을 느끼는 경우 실제 파서를 사용할 수 있습니다. 거기에 너무 가난한 사람의 하나).

또 다른 방법은 partial 클래스를 사용하고 주 하나 옆에 바로 customiser 파일의 install.ps1 슬롯을 수 있도록 할 수있다.

아니면 그냥 사용 optimise out your #ifdef SILVERLIGHTs에 충분히 열심히 노력 havent 한 tricks 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 파일 만 만들고 싶습니다. 그것에있는 LIGHTLIGHT 조건 (부 풀기를 줄이고, 마술 500의 선에 가깝게하십시오). –

+0

+1 좋은 해킹이지만 많은 사람들이 수백 메그를 구하려고 그렇게 큰 가정을하지 않습니다. (나는 당신이 그것을 안다는 것을 알고 있습니다) –

0

단지 .cs 파일을 프로젝트에 추가해야하는 이유는 무엇입니까?

파일을 공통 위치에서 참조하려는 경우 .csproj 파일을 수동으로 편집하여 프로젝트 디렉토리에있는 경로를 사용하는 대신 절대 (또는 상대) 경로를 사용할 수 있습니다.

+0

미안하지만 어쩌면 충분히 명확하지 않을 수도 있습니다. "release version"은 단일 cs 파일을 만드는 것을 의미합니다 (바이너리 릴리즈가 없음). 버전 관리는 NuGet에서 처리합니다. –