2012-08-16 27 views
10

मैं एमएसबिल्ड को संपत्ति पास करने का प्रयास कर रहा हूं। संपत्ति मूल्यों की अर्धविराम-सीमित सूची है। this question के विपरीत, मैं PowerShell से MSBuild चला रहा हूं।PowerShell से इसे चलाते समय MSBuild कमांड लाइन पर अर्धविराम युक्त एक संपत्ति मान कैसे पास करूं?

मैं:

PS> msbuild .\Foo.sln /p:PackageSources="\\server\NuGet;E:\NuGet" 

MSBUILD : error MSB1006: Property is not valid. 
Switch: E:\NuGet 

अगर मैं कमांड प्रॉम्प्ट से एक ही आदेश चला है, यह ठीक काम करता है। मैं PowerShell में काम करने के लिए कैसे प्राप्त करूं?

+0

अर्धविराम के सामने बैकटिक एस्केप कैरेक्टर (" '") का उपयोग करने का प्रयास करें। संभावित रूप से उस स्ट्रिंग में अन्य वर्ण भी। – David

+2

बैकटिक काम नहीं करता है - समस्या यह है कि एमएसबिल्ड अपेक्षा करता है/पी: प्रोपे = वैला; प्रोप = वैलबी। अर्धविराम को एमएसबिल्ड से 'एस्केपिंग' की ज़रूरत है, न कि पावरशेल से। उद्धरण जोड़ना इसे ठीक करना चाहिए, लेकिन कमांड लाइन को पार करते समय PoSh उन्हें बाहर खींचता है। –

उत्तर

17

लपेटें एकल उद्धरण में पैरामीटर:

... '/p:PackageSources="\\Server\NuGet;E:\NuGet"' 

PowerShell पर इस कोशिश V3:

msbuild .\Foo.sln --% /p:PackageSources="\\Server\NuGet;E:\NuGet" 
+0

v3 की जांच नहीं कर सकता (मैंने इसे पावरशेल कंसोल सेटिंग्स - फ़ॉन्ट, रंग, आकार) तोड़ने पर इसे अनइंस्टॉल किया, लेकिन अतिरिक्त सिंगल कोट्स काम करते हैं। –

-1

VBScript समारोह नीचे संपत्ति मूल्यों के लिए पारित बचने के लिए इस्तेमाल किया जा सकता MSBuild.exe डबल कोट्स के अंदर:

Function Escape(s) 
     Escape = s 

     Set objRegEx = CreateObject("VBScript.RegExp") 

     objRegEx.Global = True 
     objRegEx.Pattern = "(\\+)?""" 

     Escape = objRegEx.Replace(Escape,"$1$1\""") 

     objRegEx.Pattern = "(\\+)$" 

     Escape = objRegEx.Replace(Escape,"$1$1") 
    End Function 

निम्नलिखित उदाहरण दर्शाता एस्केप() समारोह के उपयोग

Set objShell = WScript.CreateObject("WScript.Shell")   
    objShell.Run "msbuild.exe echo.targets /p:Param1=""" & Escape("ParamValue1") & """,Param2=""" & Escape("ParamValue1") & """", 1, True 
+0

आपको एक प्रश्न पूछना चाहिए (और स्वयं जवाब) जहां यह उत्तर जी सकता है। पावरशेल के साथ इसका कोई लेना-देना नहीं है। –

0

इसके अलावा का उपयोग कर ascii मूल्य मदद कर सकता है:।

MSBuild \ Foo.sln/p: PackageSources = "\ सर्वर \ NuGet% 3BE : \ NuGet "

+0

हाय, आप एक बहुत पुराने सवाल का जवाब दे रहे हैं। क्या आप विस्तारित कर सकते हैं कि आपका उत्तर पहले से प्रदान किए गए लोगों से बेहतर क्यों है? –

+2

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

+0

कूल! अगली बार मैं उस पाठ को सीधे आपके पोस्ट (संपादित करें) में जोड़ दूंगा जहां इसे भविष्य के पाठक के लिए आसानी से पाया जा सकता है। आप अभी भी ऐसा कर सकते हैं (मैं इसकी अनुशंसा करता हूं)। –

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

  • कोई संबंधित समस्या नहीं^_^