2011-01-25 4 views
6

테스트 프로젝트를 제외하고 10 개의 프로젝트가 포함 된 매우 복잡한 솔루션이 있습니다. 리모컨을 사용하여 통신하는 분산 응용 프로그램 네트워크 &입니다. 따라서 적절한 참조 어셈블리 (& 버전)를 갖는 것이 중요합니다. 그래서 모든 것을 하나의 빌드로 컴파일하고 줄이기를 원합니다.전체 솔루션을 빌드하고 하나의 프로젝트에만 전역 조건부 컴파일 기호 추가

응용 프로그램 중 하나는 다른 사용자의 입력을 기반으로 한 훨씬 더 큰 응용 프로그램의 하위 프로세스를 실행하고 결과를 표시하는 데모/분석 도구입니다. 그렇게하면 엔지니어는 "큰 계산"에 대한 설정을 조정할 수있는 도구를 갖게됩니다. 분명히 그 서브 프로세스는 프로젝트 설정에서 조건부 컴파일 기호는 해당 프로젝트의 어셈블리에 한정 할 것을 또 다른 어셈블리에 포함되며, 엔지니어에게 제시 테 결과의 큰 부분은

#if ENABLE_TRACE_MATCHING 
Trace.WriteLine("Some engineering output"); 
#endif 

내 문제에 의해 생성되는 참조 된 어셈블리에 전파되지 않습니다. 어떻게 참조 된 모든 프로젝트가/어셈블리이

정의되는 ENABLE_TRACE_MATCHING 컴파일해야 하나 디버그/분석 - 응용 프로그램 프로젝트를 제외한 모든 프로젝트가 ENABLE_TRACE_MATCHING 정의하지 않고 을 구축 할 것 같은 방법으로 내 빌드를 구성 할 수 있습니다

또한 #if DEBUG로 #if ENABLE_TRACE_MATCHING을 (를) 대체 할 수 없습니다. 그러면 엔지니어가 처리 방법을 알지 못해서 많은 출력을 낼 수 있기 때문입니다.

미리 감사드립니다.

추신 : 내 코드가 냄새라고 생각하면 동의합니다. 또한 : 대부분 내 코드가 아닙니다.)

+0

나는 얘기를 깜빡 했네요 – user588939

답변

1

모든 프레임 워크의 설치에 사용되는 Microsoft .NET 도구 인 Microsoft Build에 대해 자세히 알아야합니다.

MSBuild를 사용하여 이러한 "기호"(속성)와 명령 모음 (대상)을 정의 할 수 있습니다.

솔루션의 모든 프로젝트에서 기본 Visual Studio 대상을 가져오고 이러한 속성 ("심볼")을 스크립트에 선언하는 MSBuild 스크립트를 만들 수 있습니다.

실제로 이러한 심볼을 설정하는 속성은 이미 존재합니다 : "DefineConstants".

당신이 가지고 있기 때문에, 그 속성 값을 제공하는 MSBuild 스크립트를 가지고 거기에 그것을 다시 선언 할 수 있습니다. 그래서 모든 MSBuild 대상은이 기호에 대해 알게 될 것입니다.

편집 :이 다른 질문이 너무 확인 : 모든 C# 및 .NET 3.5의 : msbuild, defining Conditional Compilation Symbols

관련 문제