2011-05-25 10 views
5

ओवरराइड करने के लिए मैं एक सी # परियोजना संपत्ति संस्करण कहा जाता है परिभाषितएक टीम शहर के वातावरण चर का उपयोग करना एक परियोजना संपत्ति

रूप
<Version Condition="$(Version)==''">1.2.3.4<Version> 

1.2.3.4 डिफ़ॉल्ट मान है।

मेरे पास एक टीम सिटी सिस्टम प्रॉपर्टी है, जिसे वर्जन भी कहा जाता है, जिसे ओवरराइड करने के लिए सेट किया गया है। तो टीम सिटी में कस्टम रन संवाद में, मैं संस्करण के लिए एक मान निर्दिष्ट कर सकता हूं और वह मान उपयोग किया जाता है। यह ठीक काम करता है।

यदि मैं टीम सिटी में पैरामीटर खाली छोड़ देता हूं, तो डिफ़ॉल्ट मान अभी भी रिक्त (शून्य?) के साथ अधिलेखित है। यदि मैं टीम सिटी पैरामीटर हटा देता हूं, तो डिफ़ॉल्ट मान का उपयोग किया जाता है।

क्या स्थिति गलत है? मैं टीम सिटी प्रॉपर्टी को रिक्त होने के लिए कैसे स्थापित कर सकता हूं, और अगर मैं कुछ मूल्य दर्ज करता हूं तो केवल ओवरराइड कर सकता हूं?

उत्तर

6
ओपी की टिप्पणी के बाद

अपडेट किया गया जवाब:

डॉक्स से:

MSBuild आप कमांड लाइन से गुण /संपत्ति या/p आदेश पंक्ति स्विच का उपयोग निर्धारित करने की अनुमति देता है। प्रॉपर्टी मूल्य कमांड लाइन प्रॉपर्टी वैल्यू प्रोजेक्ट फ़ाइल और प्रॉपर्टी पर्यावरण से विरासत में प्राप्त मान चर से प्राप्त संपत्ति मान ओवरराइड करें।

तो आप बस TeamCity विन्यास में एक संपत्ति $ (VersionTC) सेट और देखें कि क्या है कि संपत्ति खाली है या नहीं और संस्करण

<Version>$(VersionTC)<Version> 
<Version Condition="'$(VersionTC)'==''">1.2.3.4<Version> 

सेट (ताकि आप पहले VersionVersionTC करने के लिए सेट कर सकते हैं। इसके बाद यह देखने यदि यह खाली है और डिफ़ॉल्ट सेट करें)

इस blog post पर यह सब कुछ समझाएं। नीचे की तरह


कोशिश कुछ:

<Version Condition=" '$(Version)'=='' ">1.2.3.4<Version> 

नोट ' ' (एकल उद्धरण) के आसपास $(Version)

+0

धन्यवाद, यह – jbemt48

+0

@ स्पाइडर एम 9 की मदद नहीं करता है - जो केवल स्पष्टता के लिए था। क्या आपने अतिरिक्त '' ''आसपास के $ (संस्करण) को नोटिस नहीं किया? – manojlds

+0

@ jbemt48 - मैंने अपना उत्तर – manojlds

4

टीम शहर शायद अभी भी, कमांड लाइन पर पैरामीटर गुजर रहा है सिर्फ एक खाली मूल्य के साथ , जैसा कि,

/p:Version="" 

या कुछ si Milar। जो लक्षण आप देख रहे हैं वह इस बात के कारण है कि MSBuild कैसे ओवरराइड गुणों से संबंधित है। कमांड लाइन पर निर्दिष्ट होने पर, एक संपत्ति उस मूल्य को ले लेगी चाहे वह एक स्थिर (फ़ाइल में वैश्विक, लक्ष्य के अंदर नहीं) में घोषित किया गया हो या नहीं, संपत्ति समूह घोषणा। तो संस्करण की आपकी घोषणा, तह खाली स्ट्रिंग के लिए कंडीशन की जांच की जा रही है, पूरी तरह से छोड़ी जा रही है।

इसके आस-पास एक तरीका है अपने प्रॉपर्टी ग्रुप को अपनी स्थिति के साथ $ (संस्करण) की घोषणा, जिसमें वह पहले इस्तेमाल किया गया है, के अंदर है। एमएसबिल्ड एक कमांड लाइन प्रॉपर्टी के मूल्य को ओवरटाइटिंग को "गतिशील" संपत्ति से रनटाइम पर बनाए गए लक्ष्य से ओवरराइट करने की अनुमति देगा।

आप इस कमांड लाइन चलाते हैं ...

> msbuild My.proj /t:Ver /p:Version="" 

... और इस लक्ष्य है ...

<Target Name="Ver"> 
    <PropertyGroup> 
    <Version Condition="'$(Version)' == ''">1.2.3.4<Version> 
    </PropertyGroup> 
    <Message Text="Version: '$(Version)'" /> 
</Target> 

... तुम मिल संस्करण 1.2.3.4 दिखा होगा, जबकि लक्ष्य के बाहर PropertyGroup के साथ, यह खाली मूल्य बनाए रखेगा।

+0

और जब तक आप का उपयोग नहीं करते हैं, तब तक आप लक्ष्य के भीतर स्थानांतरित होने पर भी काम नहीं करेंगे। मेरा अद्यतन उत्तर – manojlds

+0

एक लक्ष्य के अंदर एक संपत्ति समूह को स्थानांतरित करना अब (लगभग) अप्रचलित CreateProperty कार्य के लिए 4.0 समकक्ष वाक्यविन्यास है। और यह काम करेगा, कोशिश करो! –

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