2009-01-26 17 views
54

मैं संभवतः सिर्फ अंधा हूं, लेकिन क्या एमएसबीयूआईएलडी में सशर्त संकलन प्रतीकों को निर्दिष्ट करने के लिए एक कमांड लाइन है?msbuild, सशर्त संकलन प्रतीकों को परिभाषित करना

मैं वर्तमान में मेरे buildscript में इस लाइन है:

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 

और मैं एक शर्त जोड़ना चाहते हैं। विजुअल स्टूडियो में, मैं सिर्फ प्रोजेक्ट प्रॉपर्टीज => बिल्ड => सशर्त संकलन प्रतीकों में जा सकता हूं, लेकिन मैंने एमएसबिल्ड के लिए यह विकल्प नहीं देखा है?

बोनस कर्म करता है, तो आप अगर मैं पूरी तरह से यकीन है कि मेरी Buildscript से केवल सशर्त में जाना बनाने के लिए पहले से ही .csproj फ़ाइलों में निर्दिष्ट सभी प्रतीकों ओवरराइड कर सकते हैं पता है।

+0

और बीटीडब्लू, यह http://stackoverflow.com/questions/296147/msbuild-conditional-compilation का डुप्लिकेट नहीं है क्योंकि दूसरे प्रश्न का एक ही शीर्षक है लेकिन उत्तर में केवल विजुअल स्टूडियो/प्रोजेक्ट फ़ाइल संशोधन शामिल है। –

उत्तर

108

आप this को देखा है? (सबसे जानकारी अंत से पहले पोस्ट में है)

/p:DefineConstants="MYSYMBOL1;MYSYMBOL2" 
+5

कोड जोड़ा गया, वह था, धन्यवाद! यह सभी कॉन्स्टेंट को ओवरराइड करता है जिसे .csproj फ़ाइल में परिभाषित किया जा सकता है, जो भी अच्छा है। –

+1

मैं पहले ही बोनस कर्म महसूस कर सकता हूं। ;-) – Tomalak

+4

इसके लिए मेरे लिए काम करने के लिए, मुझे इसे कमांड लाइन में जोड़ने के लिए मजबूर होना पड़ा:/t: xbuild से os x टर्मिनल का उपयोग करके –

13

मैं अर्धविराम एक ला ब्योर्न Lasar द्वारा इस पोस्ट के बजाय एक अंतरिक्ष का इस्तेमाल किया था: http://www.linqinpark.net/2009/01/13/MSBuildWithMultipleDefineConstants.aspx

अद्यतन: ब्लॉग गायब हो गया है;retrieved via Internet Archive:

हाल ही में मैं सीधे MSBuild उपयोग करने के लिए कुछ बनाता है स्वचालित करने के लिए किया था। मुझे कॉन्फ़िगरेशन के आधार पर कुछ प्रीप्रोसेसर परिभाषाओं को भी कॉन्फ़िगर करना पड़ा। यह आम तौर पर यहाँ इस

"/p:DefineConstants=MY_PREPROC_FLAG" 

कुछ भी नहीं विशेष तरह एक तर्क द्वारा किया जाता है के बाद से वहाँ उस के बारे में वेब पर पर्याप्त टिप्पणी कर रहे हैं। आज मैं एक झंडा अधिक जरूरत है और मुझे कमांडलाइन वाक्य रचना मैं इसे कैसे आईडीई से पता था के लिए इसी तरह का प्रयोग किया:

"/p:DefineConstants=MY_PREPROC_FLAG;YET_ANOTHER_FLAG" 

लेकिन इस एक काम नहीं किया।

तो बात यह जोड़ दिया जाएगा कि आप सरल रिक्त स्थान से उन्हें अलग करना होगा आप कमांडलाइन द्वारा एक परियोजना के लिए कई परिभाषित करता है समर्थन करने के लिए चाहते हैं, तो है ...

"/p:DefineConstants=MY_PREPROC_FLAG YET_ANOTHER_FLAG" 

और (अर्धविराम से अलग) आईडीई से परिभाषित करता है। यह जानना अच्छा है मुझे लगता है कि ...

+2

के रूप में अपेक्षित संपत्ति का नाम और मान यह एक मृत लिंक है। – chrish

+0

@ ब्रोडी किया गया। एफडब्ल्यूआईडब्ल्यू स्वीकृत पोस्ट (जिसे मैंने ऊपर उठाया है) भी अधिक दोषी है लेकिन ज्वार अभी तक बाहर नहीं हुआ है: डी –

+2

@ रूबेनबार्टेलिंक - अच्छी तरह से किया गया। – Brody

0

/p:DefineConstants एक सब कुछ या कुछ सौदा है।

तुम सिर्फ प्रतीक का पता लगाने को बंद करना चाहते हैं, तो आप बस इसे साथ नहीं कर सकते: msbuild /p:DefineConstants="RANDOM-SYMBOL"

धन्यवाद माइकल Stum बिंदु: msbuild /p:DefineTrace=false

आप सभी प्रतीकों पहले से परिभाषित ओवरराइड करने के लिए कुछ निर्धारित करने की I have also wrote a blog about it

1

उत्तर में जो कहा गया है वह C# कोड के लिए मान्य है, और एएसपी.नेट "कोडबेइंड" सी # कोड के लिए भी मान्य है।एएसपी.NET वेब प्रोजेक्ट्स, यदि आप एएसपीएक्स पृष्ठों में सशर्त संकलन करना चाहते हैं, तो यह पेज पर एचटीएमएल को सशर्त रूप से प्रस्तुत करने के लिए थोड़ा अलग काम करता है (नोट मैंने 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 %> 

आप CompilerOptions से DebugSym1 या DebugSym2 निकालते हैं, तब प्रासंगिक #if बयान के #else हिस्सा प्रदान की गई है।

मैंने सोचा कि यह इस विषय की पूर्णता के लिए उल्लेखनीय है और आपको समय बचा सकता है। यदि आप रुचि रखते हैं तो आप इस article में पा सकते हैं।

संबंधित मुद्दे