program story

msbuild, 조건부 컴파일 기호 정의

inputbox 2020. 11. 30. 08:09
반응형

msbuild, 조건부 컴파일 기호 정의


나는 맹인일 수 있지만 MSBUILD에 조건부 컴파일 기호를 지정하는 명령 줄이 있습니까?

현재 내 빌드 스크립트에 다음 줄이 있습니다.

SET MSBUILD=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe
SET CONFIG=Debug
%MSBUILD% /p:Configuration=%CONFIG% /p:OutputPath=..\..\output source\MyProject\MyProject.csproj

그리고 조건을 추가하고 싶습니다. Visual Studio에서 프로젝트 속성 => 빌드 => 조건부 컴파일 기호로 이동할 수 있지만 msbuild에 대한 해당 옵션을 보지 못했습니까?

.csproj 파일에 이미 지정된 모든 기호를 완전히 재정 의하여 내 Buildscript의 조건 만 들어가도록 할 수 있는지 알고 있다면 Karma를 보너스로드립니다.


이거 본 적 있어 ? (대부분의 정보는 두 번째 포스트에 있습니다)

/p:DefineConstants="MYSYMBOL1;MYSYMBOL2"

Björn Lasar의이 게시물은 세미콜론 대신 공백을 사용해야했습니다. http://www.linqinpark.net/2009/01/13/MSBuildWithMultipleDefineConstants.aspx

업데이트 : 블로그가 사라졌습니다. 인터넷 아카이브를 통해 검색 :

최근에 일부 빌드를 자동화하기 위해 MSBuild를 직접 사용해야했습니다. 또한 구성에 따라 일부 전 처리기 정의를 구성해야했습니다. 이것은 일반적으로 다음과 같은 인수에 의해 수행됩니다.

"/p:DefineConstants=MY_PREPROC_FLAG"

웹에 그것에 대한 충분한 의견이 있기 때문에 여기에 특별한 것은 없습니다. 오늘은 하나의 플래그가 더 필요했고 IDE에서 알고있는 것과 유사한 명령 줄 구문을 사용했습니다.

"/p:DefineConstants=MY_PREPROC_FLAG;YET_ANOTHER_FLAG"

그러나 이것은 작동하지 않았습니다.

요점은 명령 줄로 프로젝트에 대한 여러 정의를 지원하려면 간단한 공백으로 구분해야한다는 것입니다.

"/p:DefineConstants=MY_PREPROC_FLAG YET_ANOTHER_FLAG" 

IDE에서 정의 (세미콜론으로 구분)에 추가됩니다. 알아서 반가워요 ...


답변에서 말한 내용은 C#코드 및 ASP.NET "코드 숨김"C # 코드에도 유효 합니다. 내용은 ASP.NET 웹 프로젝트 당신이뿐만 아니라 ASPX 페이지에 조건부 컴파일을 수행하려는 경우, 그것은 조건부 (주 내가 삭제 한 페이지의 HTML 렌더링에 약간 다르게 작동 MasterPageFile="..." AutoEventWireup="true" CodeBehind="..." Inherits="..."은 일반적으로이 <%@ ... %>선언은 물론) :

<%@ Page Title="MyPage" Language="C#" CompilerOptions="/d:DebugSym1;DebugSym2" %>

<% #if DebugSym1 %>         
    <h4>Section1</h4>
<% #else %>
    <h4>(Section 1 skipped)</h4>
<% #endif %>

<% #if DebugSym2 %>         
    <h4>Section2</h4>
<% #else %>
    <h4>(Section 2 skipped)</h4>
<% #endif %>

당신은 제거 할 경우 DebugSym1DebugSym2로부터 CompilerOptions, 다음 #else의 관련 부분 #if문이 렌더링됩니다.

이 주제의 완전성을 위해 언급 할 가치가 있으며 시간을 절약 할 수 있다고 생각했습니다. 관심이 있다면 기사 에서 더 많은 것을 찾을 수 있습니다 .


/p:DefineConstants 전부 아니면 전무 거래입니다.

추적 기호를 끄려면 다음과 같이 할 수 없습니다. msbuild /p:DefineTrace=false

이미 정의 된 모든 기호를 재정의하려면 무언가를 정의해야합니다. msbuild /p:DefineConstants="RANDOM-SYMBOL"

감사합니다 Michael Stum이 숨겨진 규칙을 지적 했습니다.

참고 URL : https://stackoverflow.com/questions/479979/msbuild-defining-conditional-compilation-symbols

반응형