2009-11-03 11 views
8

जब एक ही संपत्ति में अर्धविराम होता है, तो एमएसबिल्ड स्वचालित रूप से किसी आइटम समूह में उपयोग किए जाने पर गुणों की सूची में संपत्ति को पार्स करता है। यहाँ मेरी परियोजना से एक टुकड़ा है:एमएसबिल्ड: अर्धविराम सीमांकित संपत्ति के पार्सिंग को नियंत्रित करने के लिए कैसे करें

<PropertyGroup> 
    <ConnectionString>workstation id=.;packet size=4096;Integrated Security=SSPI;data source=.;initial catalog=$(SqlDbName)</ConnectionString> 
</PropertyGroup> 

<ItemGroup> 
    <InstallShieldProperties Include=" 
     CONNECTIONSTRING=$(ConnectionString); 
     Another=$(value)"/> 
</ItemGroup> 

एक कार्य @ (InstallShieldProperties) itemgroup की खपत करते हैं, MSBuild सबसेट संपत्तियों की एक सूची में ConnectionString गुण पार्स करेगा क्योंकि इसमें अर्धविराम शामिल हैं।

foreach (string property in Properties) 
    { 
     // Properties array parsed to pieces 
    } 

मुझे पता है कि मैं आइटम समूह के डिलीमीटर को बदल सकता हूं, लेकिन इससे कोई फर्क नहीं पड़ता। मैं कस्टम कार्य के भीतर स्ट्रिंग [] सरणी में हेरफेर करने से बचने की कोशिश कर रहा हूं।

उत्तर

9

AFAICS, आप या तो $ में अर्धविराम बच सकते हैं (ConnectionString) संपत्ति की तरह:

<ConnectionString>workstation id=.%3Bpacket size=4096%3B.."</ConnectionString> 

या बदलने के लिए कुछ काम का उपयोग ';' ConnectionString प्रॉपर्टी में '% 3B' में और फिर उस संपत्ति का उपयोग InstallShieldProperties आइटम में करें।

दूसरा तरीका स्ट्रिंग [] से स्ट्रिंग से कस्टम कार्य में संपत्ति प्रकार को बदलने के लिए हो सकता है, और फिर इसे स्वयं जिस तरह से आप चाहते हैं उसे विभाजित कर सकते हैं। आप अन्य कुंजी/मूल्य जोड़े से कनेक्शन स्ट्रिंग भाग को अलग करने के लिए संलग्न उद्धरणों का उपयोग कर सकते हैं।

या यदि यह आपके कस्टम कार्य के लिए समझ में आता है, तो हो सकता है कि कनेक्शन स्ट्रिंग एक अलग कार्य संपत्ति के रूप में एक विशेष पर्याप्त संपत्ति हो।

8

एमएसबिल्ड 4.0 में, अब Property Functions हैं। एक चीज जो आपको करने की अनुमति देती है वह सीधे आपके गुणों पर .NET स्ट्रिंग इंस्टेंस विधियों को कॉल करती है जैसे कि वे स्ट्रिंग हैं (जो वे हैं)।

अपने उदाहरण में, उपयोग करने के बजाय:

$(ConnectionString) 

आप इस्तेमाल कर सकते हैं:

$(ConnectionString.Replace(';', '%3B')) 

कौन सा स्ट्रिंग विधि कॉल करेगा (% के साथ अर्धविराम की जगह बदलें) 3 बी

9

में एमएसबिल्ड 4.0, आप $([MSBuild]::Escape($(ConnectionString))) का उपयोग कर सकते हैं।

+1

बहुत उपयोगी! और [यहां संपत्ति कार्यों के दस्तावेज का एक लिंक है] (http://msdn.microsoft.com/en-us/library/dd633440.aspx)। –

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

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