जवाबों:
प्री- और पोस्ट-बिल्ड इवेंट एक बैच स्क्रिप्ट के रूप में चलते हैं। आप पर एक सशर्त बयान कर सकते हैं $(ConfigurationName)
।
उदाहरण के लिए
if $(ConfigurationName) == Debug xcopy something somewhere
FYI करें, आपको गोटो का उपयोग करने की आवश्यकता नहीं है। शेल IF IF का उपयोग राउंड ब्रैकेट के साथ किया जा सकता है:
if $(ConfigurationName) == Debug (
copy "$(TargetDir)myapp.dll" "c:\delivery\bin" /y
copy "$(TargetDir)myapp.dll.config" "c:\delivery\bin" /y
) ELSE (
echo "why, Microsoft, why".
)
"$(ConfigurationName)"
यदि आपको त्रुटि कोड 255
$(ConfigurationName)
में खाली है (पोस्ट-बिल्ड इवेंट कमांड लाइन)। if "$(Configuration)" == "Debug"
मेरे लिए काम किया। BTW, यदि आप अन्य सभी विन्यास में कुछ करना चाहते हैं, का उपयोग करें if NOT "$(Configuration)" == "Debug"
।
अपनी पोस्ट बिल्ड ईवेंट को सामान्य की तरह जोड़ें। फिर अपनी परियोजना को बचाएं, इसे नोटपैड (या अपने पसंदीदा संपादक) में खोलें , और PostBuildEvent संपत्ति समूह में शर्त जोड़ें। यहाँ एक उदाहरण है:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
cd "$(ProjectDir)"
का विस्तार किया cd ""
।
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="$(ConfigurationName) == Debug"> <Exec Command="your command"/></Target>
। मैक्रो चर और सब कुछ सामान्य के रूप में काम करते हैं।
वैकल्पिक रूप से (चूंकि घटनाओं को एक बैच फ़ाइल में डाल दिया जाता है और फिर बुलाया जाता है), निम्नलिखित का उपयोग करें (बिल्ड ईवेंट बॉक्स में, बैच फ़ाइल में नहीं):
if $(ConfigurationName) == Debug goto :debug
:release
signtool.exe ....
xcopy ...
goto :exit
:debug
' Debug items in here
:exit
इस तरह से आप किसी भी विन्यास के लिए ईवेंट हो सकते हैं, और अभी भी बजाय उन्हें एक बैच फ़ाइल में पारित करने के लिए की तुलना में मैक्रो साथ प्रबंधित करें, कि याद %1
है $(OutputPath)
, आदि
Error 1 The command "C:\MyProject\postbuild.bat" exited with code 99. MyProject
if
और उपयोग कर सकते हैंgoto :$(ConfigurationName)
विजुअल स्टूडियो 2015: सही सिंटैक्स है (इसे एक पंक्ति पर रखें):
if "$(ConfigurationName)"=="My Debug CFG" ( xcopy "$(TargetDir)test1.tmp" "$(TargetDir)test.xml" /y) else ( xcopy "$(TargetDir)test2.tmp" "$(TargetDir)test.xml" /y)
यहां कोई त्रुटि नहीं 255।
विजुअल स्टूडियो 2019 के अनुसार, आधुनिक .csproj
प्रारूप सीधे Target
तत्व पर एक शर्त जोड़ने का समर्थन करता है:
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Debug'">
<Exec Command="nswag run nswag.json" />
</Target>
UI इसे सेट अप करने का एक तरीका प्रदान नहीं करता है, लेकिन Configuration
यदि आप UI के माध्यम से परिवर्तन करते हैं तो यह विशेषता को सुरक्षित रूप से छोड़ने के लिए प्रकट होता है ।
आप कॉन्फ़िगरेशन नाम को पोस्ट-बिल्ड स्क्रिप्ट में पास कर सकते हैं और इसे वहां देख सकते हैं कि यह चलना चाहिए या नहीं।
कॉन्फ़िगरेशन नाम के साथ पास करें $(ConfigurationName)
।
यह जाँचना इस बात पर आधारित है कि आप पोस्ट-बिल्ड चरण को कैसे लागू कर रहे हैं - यह एक कमांड-लाइन तर्क होगा।
यह मेरे लिए Visual Studio 2015 में काम करता है।
मैं सभी DLL फ़ाइलों को लाइब्रेरी फ़ोल्डर में स्थित एक फ़ोल्डर से उसी स्तर पर कॉपी करता हूं, जिस तरह से मेरा सोल्यूशन फोल्डर प्रोजेक्ट के लक्ष्य-निर्धारण में बनाया जा रहा है।
मेरी परियोजना निर्देशिका से एक रिश्तेदार पथ का उपयोग करना और फ़ोल्डर संरचना के साथ दो चरणों में जाना .. \ _ \ lib
MySolutionFolder
.... MyProject
Lib
if $(ConfigurationName) == Debug (
xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)"
) ELSE (echo "Not Debug mode, no file copy from lib")
किसी भी प्रोजेक्ट सेटिंग की तरह, बिल्डविंट्स को प्रति कॉन्फ़िगरेशन कॉन्फ़िगर किया जा सकता है। बस उस कॉन्फ़िगरेशन का चयन करें जिसे आप प्रॉपर्टी पेज डायलॉग के ड्रॉपडाउन में बदलना चाहते हैं और पोस्ट बिल्ड चरण को संपादित करें।
विज़ुअल स्टूडियो 2012 में आपको उपयोग करना होगा (मुझे लगता है कि विज़ुअल स्टूडियो 2010 में भी)
if $(Configuration) == Debug xcopy
$(ConfigurationName)
को मैक्रो के रूप में सूचीबद्ध किया गया था, लेकिन इसे असाइन नहीं किया गया था।
तुलना करें: बिल्ड कमांड और गुण के लिए मैक्रोज़