2013-03-05 6 views
5

मेरे पास विजुअल स्टूडियो में एक समाधान है जिसमें मेरे पास एक साझा संपत्ति शीट है जिसमें पोस्ट-बिल्ड इवेंट कमांड (bar) शामिल है जिसे प्रत्येक प्रोजेक्ट के लिए निष्पादित करने की आवश्यकता होती है।विजुअल स्टूडियो में इनहेरिट पोस्ट-बिल्ड-इवेंट?

Foo.props> आम गुण> बिल्ड घटनाक्रम> पोस्ट-बिल्ड घटना> कमांड लाइन = बार

कैसे मैं तो निर्दिष्ट करूँ अतिरिक्त परियोजना विशेष के बाद बिल्ड घटनाक्रम? सामान्य "पैरेंट या प्रोजेक्ट डिफॉल्ट से इनहेटिट" गायब है, और मुझे मैन्युअल रूप से bar प्रत्येक प्रोजेक्ट में मैन्युअल रूप से जोड़ने की आवश्यकता नहीं है क्योंकि इसे बनाए रखना मुश्किल हो जाता है।

उत्तर

2

इस post के आधार पर, यह संभव नहीं लगता है। आपने कुछ समय पहले अपना प्रश्न पोस्ट किया था; क्या आप एक व्यवहार्य विकल्प खोजने के लिए प्रबंधन किया था?


प्रतिक्रिया के बाद संपादित:

<!-- CommandX.props --> 
<PropertyGroup> 
    <CommandX>bar</CommandX> 
</PropertyGroup> 

तो फिर तुम इस परियोजना की या किसी अन्य के बाद निर्माण आदेश को $(CommandX) जोड़ सकते हैं: एक संभावित गन्दा विकल्प होगा मैक्रो के रूप में अपने आदेश को परिभाषित करने के संपत्ति पत्रक यदि $(CommandX) मौजूद नहीं है, तो इसे चुपचाप अनदेखा किया जाता है।

यदि आप किसी अन्य संपत्ति चादर को यह मैक्रो जोड़ने, तो आप Import करने के लिए अपने CommandX संपत्ति चादर होगा ताकि $(CommandX) एक मूल्य विरासत:

<!-- Some-Other-Property-Sheet.props --> 
<ImportGroup Label="PropertySheets"> 
    <Import Project="CommandX.props" /> 
</ImportGroup> 

निर्माण के बारे में थोड़ा और अधिक सीखने के बाद प्रक्रिया, मैं MSBuild tasks का उपयोग करने की सिफारिश करना चाहता हूं; विशेष रूप से, Exec task सबसे व्यवहार्य समाधान प्रदान कर सकता है।

+0

नहीं, मैं मैन्युअल रूप से अलग से हर परियोजना बनाए रखने के लिए, मेरे सवाल के अनुसार सहारा लिया। एकमात्र समाधान मैंने सोचा है (लेकिन लागू करने का प्रयास नहीं किया गया) स्क्रिप्ट के माध्यम से अपनी विरासत संरचना को डिजाइन कर रहा है - क्या प्रत्येक प्रोजेक्ट को उसी पोस्ट स्क्रिप्ट के रूप में एक ही स्क्रिप्ट को कॉल किया जाता है लेकिन प्रोजेक्ट नाम में एक चर के रूप में पास होता है, और स्क्रिप्ट है अतिरिक्त आदेशों को उचित के रूप में चलाएं। गुंजाइश, लेकिन कम से कम यह केवल एक फ़ाइल में रखरखाव को कम कर देता है। – JBentley

+0

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

13

इस समाधान को ढूंढने और अन्य पोस्ट को देखने के बाद। मुझे यह समझना असंभव लगता है कि वीसी ++ टीम इस सुविधा को क्यों छोड़ देगी।

संपत्ति पृष्ठों के लिए मैक्रोज़ को देखने के बाद आप% (कमांड) मैक्रो/पर्यावरण चर का उपयोग कर पिछले गुणों से कमांड शामिल कर सकते हैं। यह सभी निर्माण घटनाओं के लिए काम करता है।

PropertySheet1.props

copy some.dll $(OutputPath) 
%(Command) 

PropertySheet2.props

सभी आदेशों में
copy other.dll $(OutputPath) 
%(Command) 

परिणाम निष्पादित किया जा रहा।

+0

यह पूरी तरह से काम करता है। इसके लिए धन्यवाद! – Bklyn

0

कुछ पोस्ट-बिल्ड घटनाओं को संपत्ति शीट से वंचित नहीं किया गया था, इन्हें परिभाषित किया गया है, मैंने बतख पर सवाल उठाया और यहां उतरा।

मैं अच्छी खबर है: विजुअल स्टूडियो 2013 के बाद से, पूर्व बिल्ड और बाद बिल्ड घटना कमांड लाइन विकल्प है, जो संपत्ति चादरों से सभी घटनाओं कहते हैं, "माता-पिता या परियोजना चूक से इनहेरिट" एक है।

(विजुअल स्टूडियो 2013 और 2017 व्यावसायिक के साथ परीक्षण किया गया)

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