2013-02-24 92 views
20

से बनाम प्रोजेक्ट बनाते समय "(से छुटकारा पाएं" $ "सॉल्यूशनडियर" कैसे करें, मैं विजुअल स्टूडियो के बाहर से एमएसबिल्ड के माध्यम से एक .vcxproj बनाना चाहता हूं। समस्या यह है कि $ (SolutionDir) के अंदर बहुत सारे हैं .vcxproj फ़ाइल जो समाधान लोड होने पर स्पष्ट रूप से केवल सही ढंग से सेट हो जाती है।बाहरी दृश्य स्टूडियो

जब मैं वास्तविक absolut पथ यह काम करता है के साथ $ (SolutionDir) की जगह, समस्या यह है कि अन्य मशीनों पर अन्य लोगों को एक ही परियोजना फ़ाइल के साथ काम कर रहे हैं ...

किसी को भी किसी भी समाधान पता है या करने के लिए हैक करता है इस समस्या का समाधान निकले?

धन्यवाद, किसी भी मदद की बहुत सराहना की है।

साइमन

उत्तर

30

आप गुजर पैरामीटर तर्कों द्वारा चर सेट कर सकते हैं:

/p:SolutionDir=path 

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

6

आप एक सापेक्ष पथ का उपयोग कर सकते हैं। प्रश्न में वीएस -2010 के बारे में निश्चित नहीं है लेकिन यह VS2012 के बाद से काम की गारंटी देता है। यदि प्रोजेक्ट फ़ोल्डर समाधान फ़ोल्डर के नीचे है तो सापेक्ष पथ है .. \ इस तरह से पिछले उत्तर से पैरामीटर तर्क के साथ जोड़ा जा सकता है।

<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> 
+0

निर्देशिकाओं को ट्रैवर्स करना टीएफएस चेकइन में काम नहीं करता है जब ओवरराइड करते हैं। उदाहरण के लिए लक्ष्य। पूर्ण पथ की आवश्यकता है। – Shiv

+0

कृपया बताएं कि यह प्रासंगिक '* .csproj' फ़ाइल के' 'तत्व में जाना चाहिए। मुझे लगता है कि यह आपके उत्तर से लापता जानकारी का एक महत्वपूर्ण हिस्सा है। –

5

समाधान स्पष्ट रूप से पारित करने के लिए SolutionDir तर्क के रूप में मेरे लिए अपर्याप्त है। अर्थात्, यदि मैं जिस परियोजना को बनाना चाहता हूं वह अलग-अलग बिल्ड कॉन्फ़िगरेशन के साथ निर्भरता है, तो बिल्ड This project doesn't contain the Configuration and Platform combination of <my target configuration> त्रुटि के साथ विफल रहता है।

यह समझ में आता है, क्योंकि मैंने निर्भरताओं के लिए लक्ष्य कॉन्फ़िगरेशन निर्दिष्ट नहीं किया है और इस प्रकार यह उसी प्रोजेक्ट को लक्षित करने का प्रयास करता है, जिस परियोजना को मैं बना रहा हूं, जो उनके पास नहीं है (मेरे मामले में)।

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

msbuild MySolution.sln /t:MyProject