2009-05-08 24 views
29

के लिए .sln और .vcproj फ़ाइलों में मैक्रो/पर्यावरण चर मैं इसी तरह के दो समस्याएं हैं:दृश्य स्टूडियो

क) मैं एक समाधान है जो कई परियोजनाओं शामिल है और मैं आसानी से कुछ की स्थापना द्वारा परियोजना स्थान स्विच सक्षम होना चाहते हैं पर्यावरण चर/मैक्रो। उदाहरण के तौर पर यह प्रोजेक्ट \ SolutionDir \ Dir1 \ या \ SolutionDir \ Dir2 \ में स्थित हो सकता है, इसलिए, मैं यह निर्दिष्ट करना चाहता हूं कि यह \ SolutionDir \ $ (Var) में स्थित होना चाहिए और केवल चर सेट करें।

क्या ऐसा करने के लिए विजुअल स्टूडियो तरीके में कोई निर्माण है?

मुझे वर्तमान में केवल दो समाधान पता हैं - इस परियोजना को खोजने और सही पथ निर्धारित करने के लिए .sln फ़ाइल मैन्युअल/प्रोग्रामेटिक रूप से संपादित करें।

मैं .sln फ़ाइल में पर्यावरण चर का उपयोग करने में सक्षम नहीं था।

बी) मेरे पास एक प्रोजेक्ट है जिसमें संसाधन (.rc और .h) फ़ाइलें शामिल हैं। मैं अपने पर्यावरण को अन्य पर्यावरण चर या मैक्रो के माध्यम से सेट करने में सक्षम होना चाहता हूं।

कुछ \ ProjectDir \ $ (var2) की तरह \ resource.rc

मैं संपत्ति शीट पर कुछ आशाजनक जानकारी पाया है, लेकिन जब मैं उन्हें फ़ाइल टैग में उपयोग कर रहा हूँ .vcproj में दृश्य स्टूडियो मैक्रो का विस्तार नहीं करता है ।

इस समस्या को हल करने के लिए किसी भी विचार के लिए धन्यवाद।

सादर, विक्टर

+0

दिलचस्प। लेकिन मैं यह नहीं समझ सकता कि आप ऐसा क्यों करना चाहते हैं। उस समस्या को हल करने का शायद एक अलग तरीका है जिसे आप संबोधित करने का प्रयास कर रहे हैं। – Tim

+0

मैं विभिन्न OEM के लिए उत्पाद के ब्रांडेड संस्करणों के बीच आसानी से स्विच करने योग्य प्रोजेक्ट को सेटअप करना चाहता हूं। –

उत्तर

17

मुझे लगता है कि मैं एक ही लक्ष्य की तुलना में आप: मैं एक समाधान फ़ाइल (.sln) में कुछ परियोजनाओं का पता लगाने का वातावरण चर का उपयोग करने के लिए और कुछ फ़ाइलों का पता करने के लिए कुछ वातावरण चर का उपयोग करना चाहते मेरी परियोजनाओं के भीतर।

मुझे लगता है कि ऐसा करने के लिए एक रास्ता मिल गया और यह मेरे लिए ठीक काम करता है (विजुअल स्टूडियो 2005 के साथ): - साथ एक पाठ संपादक के साथ .sln फ़ाइल को संपादित और वातावरण चरों का उपयोग निम्न सिंटैक्स% MyEnvironmentVariable% - संपादित .vcproj फ़ाइलें और कुछ चर के साथ वांछित फ़ाइलों के पथ को प्रतिस्थापित करें, निम्नलिखित वाक्यविन्यास $ (MyEnvironmentVariable) के साथ।

आशा है कि यह मदद करता है ... साइरिल

+1

यह वही है जो मैं खोज रहा था, उसे नहीं पता था।एसएलएन% VAR% वाक्यविन्यास का उपयोग करता है, मैं $ (VAR) का उपयोग कर रहा हूं जो .scproj में काम करता है। धन्यवाद! – watbywbarif

+0

ध्यान रखें कि एक .sln फ़ाइल में चर प्रस्तुत करने का अर्थ है कि उन्हें MSBuild के साथ उपयोग नहीं किया जा सकता है। देखें https://connect.microsoft.com/VisualStudio/feedback/details/690318/msbuild-doesnt-parse-environment-variables-in-sln-files देखें – cowlinator

2

प्राप्त करने के लिए क्या आप ख में वर्णन) संपत्ति शीट का उपयोग करने के लिए सबसे अच्छा तरीका है। यह भी similar question देखें।

मैं संपत्ति शीट पर कुछ आशाजनक जानकारी पाया, लेकिन जब मैं उन्हें .vcproj में फ़ाइल टैग में उपयोग कर रहा हूँ दृश्य स्टूडियो मैक्रो का विस्तार नहीं करता है।

मुझे यकीन नहीं है कि आप वीएस का किस संस्करण का उपयोग करते हैं। वीएस 2008 आपको उदाहरण के लिए परिभाषित करने की सुविधा देता है: "$ (OpenCVInclude) \ cxcore \ include"। मैं इसका हर समय उपयोग करता हूं। OpenCVInclude एक संपत्ति शीट में परिभाषित एक मैक्रो है।

प्रश्न के लिए ए), मुझे लगता है कि आप जो चाहते हैं उसे करने के लिए कोई "साफ" तरीका नहीं है। एक विकल्प के रूप में आप कॉन्फ़िगरेशन प्रबंधक:

  • समाधान में सभी परियोजनाओं को शामिल करें।
  • प्रोजेक्ट को अलग-अलग नाम दें, उदाहरण के लिए OEM पर आधारित।
  • प्रत्येक प्रोजेक्ट के लिए समाधान
  • में "बिल्ड-> कॉन्फ़िगरेशन प्रबंधक" में प्रत्येक कॉन्फ़िगरेशन के लिए "बिल्ड" कॉलम को चेक या अनचेक कर सकते हैं। प्रासंगिक परियोजना के लिए "निर्माण" की जांच करें।
0

(ए) साइरिल जो आपने पूछा है उसके लिए एक सभ्य समाधान देता है। एक और तरीका है कि अपनी बदलती सेटिंग्स को एक आम जगह में रखना। ध्यान दें कि यह गैर-एमएसबिल्ड फ़ाइलों जैसे * .sln और * .vcproj (वीएस 2010 तक) के लिए काम नहीं करेगा।

परियोजना फाइलों: ... $ (ChangeableDir) \ foo.cs

Common.targets: ChangeThis ...

हालांकि, मैं डॉन ' टी लगता है कि यह चीजों को करने का एक शानदार तरीका है। यदि आप जो भी बना रहे हैं उसके बीच अंतर कार्यक्षमता के बड़े टुकड़े हैं, तो आपको अपने स्रोत नियंत्रण प्रणाली में एक शाखा बनाने पर विचार करना चाहिए। OTOH, अगर मतभेद मामूली हैं - जैसे हार्डकोडेड तार - तो यह आपके दूसरे प्रश्न की ओर जाता है ...

(ख) संसाधन प्रबंधन की तरह आप का वर्णन अनिवार्य रूप से अपने परियोजना स्थानीयकृत लोगों के सामने आने ही समस्या है विभिन्न भाषाओं में। सौभाग्य से, प्रत्यक्ष समर्थन 2005 के बाद से दृश्य स्टूडियो में बनाया गया है की तरह पिछले प्रश्न की जाँच करें: Localization in Visual Studio 2008

21

बस प्रासंगिक क्षेत्र में वातावरण चर का उपयोग करें:

OutputDirectory="$(MyEnvVariableName)\Bin" 

एक चाल है कि आप दृश्य फिर से शुरू करनी है प्रत्येक बार जब आप चर बदलते हैं तो स्टूडियो आईडीई।

वहाँ एक MSDN लेख ठीक इस बारे में है: How to: Use Environment Variables in a Build

1

मैं अगर आप सिर्फ सी ++ परियोजनाओं या आप भी सी # \ वीबी परियोजनाओं का निर्माण कर रहे है, तो निर्माण कर रहे हैं यकीन है कि नहीं हूँ, लेकिन दृश्य स्टूडियो के बारे में बड़े बड़े काम में से एक है सभी परियोजनाएं वास्तव में सिर्फ एमएसबिल्ड परियोजनाएं हैं। यदि आप किसी टेक्स्ट एडिटर में कोई प्रोजेक्ट संपादित करते हैं तो आप देखेंगे कि प्रोजेक्ट के अंत में यह एक .targets फ़ाइल आयात करता है। यदि आप ट्रैक का पता लगाते हैं और आयात का पालन करते हैं तो आप पाएंगे कि लगभग सभी वीएस परियोजनाएं Microsoft.Common.Targets आयात करती हैं। माइक्रोसॉफ्ट.कॉमोन। लक्ष्य आयात आयात करता है। पहले। माइक्रोसॉफ्ट.कॉमोन। लक्ष्य। इस आयात का उपयोग करके आप अपनी खुद की कस्टम क्रियाओं के साथ अपनी खुद की लक्ष्य फ़ाइल आयात कर सकते हैं।

उदाहरण के लिए मैं एक लक्ष्य फ़ाइल है जिसमें समाधान में सभी परियोजनाओं में परिभाषित एक आम संपत्ति है और एक कस्टम पोस्ट बिल्ड इवेंट है जो प्रत्येक प्रोजेक्ट बिल्डिंग के अंत में प्रक्रिया करता है।

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

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