मैं एक csproj कि मैं ट्रिगर दृश्य स्टूडियो में एक विशेष फ़ाइल के उद्घाटन के लिए, सिर्फ तभी जब लक्ष्य दृश्य स्टूडियो के भीतर से मार डाला गया था चाहते हैं, लेकिन MSBuild कमांड लाइन से नहीं किया है। मैं यह कैसे करु?MSBuild में, कैसे आप एक शर्त है कि यह देखना होगा कि कमांड लाइन या वी.एस. यह शुरू की निर्दिष्ट कर सकते हैं?
उत्तर
अगर मैं तुम्हें सही ढंग से समझ, आप जब दृश्य स्टूडियो में लेकिन MSBuild के साथ कमांड लाइन से नहीं निर्माण एक फ़ाइल खोलने के लिए करना चाहते हैं?
अगर ऐसा है, एक prebuild या दृश्य स्टूडियो में PostBuild निर्दिष्ट करें।
- सही समाधान एक्सप्लोरर में परियोजना पर क्लिक करें और घटनाक्रम टैब का चयन करें गुण
- चयन
- या तो एक पूर्व या पोस्ट का निर्माण घटना जोड़ें इच्छित फ़ाइल
.csproj प्रोजेक्ट फ़ाइल में एक प्रॉपर्टी जोड़ें, उदाहरण:
<PropertyGroup>
<FromMSBuild>false</FromMSBuild>
</PropertyGroup>
तो कार्य आप चलाना चाहते हैं, एक शर्त यह है कि उस संपत्ति का मूल्यांकन करता है डाल दिया। उदाहरण के लिए, यदि आप notepad.exe खोलना चाहते हैं जब भी निर्माण कमांड लाइन से नहीं मार डाला और दृश्य स्टूडियो है:
<Target Name="BeforeBuild">
<Exec Command="C:\Windows\Notepad.exe" Condition="$(FromMSBuild)" />
</Target>
बेशक
, इस $ (FromMSBuild) संपत्ति को सही ढंग से स्थापित करने पर निर्भर है जब आप चलाने कमांड लाइन के माध्यम से निर्माण तो जैसे:
MSBuild myProject.csproj /p:FromMSBuild=true
MSDN page से उद्धरण:
जब दृश्य स्टूडियो के अंदर निर्माण, संपत्ति $ (BuildingInsideVisualStudio) सही पर सेट किया जाता है। इसका निर्माण आपके प्रोजेक्ट या। टाइटेट्स फाइलों में किया जा सकता है ताकि निर्माण अलग-अलग व्यवहार कर सके।
उदाहरण है कि यह कैसे में इस्तेमाल किया जा सकता अपने * proj या .targets फ़ाइल:
<PropertyGroup>
<MyProperty Condition="'$(BuildingInsideVisualStudio)' == 'true'">This build is done by VS</MyProperty>
<MyProperty Condition="'$(BuildingInsideVisualStudio)' != 'true'">This build is done from command line of by TFS</MyProperty>
</PropertyGroup>
नहीं - मैं इसे में कस्टम MSBuild लक्ष्य के साथ एक csproj है।। जब मैं दृश्य स्टूडियो में निर्माण क्लिक करें, मैं इसे एक विशेष लक्ष्य में हो रही कार्रवाई की जा करना चाहते हैं ... स्थिति = की तरह कुछ "StartedInVS()"। जब मैं इसे कमांड लिंक से चलाता हूं (यानी msbuild ...) मैं चाहता हूं कि वह स्थिति विफल हो जाए। तो एमएसबीयूआईएलडी एक लक्ष्य में कैसे पता लगा सकता है कि लक्ष्य/किसने कहा जाता है? – zekeyeehaw
आप सही हैं, मेरी माफ़ी। मेरा पिछला जवाब गलत है, और बिल्ड इवेंट को बिना किसी पर निष्पादित किया जाएगा। मैंने एक और जवाब जोड़ा जो बताता है कि अपना लक्ष्य कैसे पूरा किया जाए, और मैंने यह सुनिश्चित करने के लिए इस बार परीक्षण किया। – BryanJ