IT-Swarm.Net

कोड 1 के साथ पोस्ट बिल्ड से बाहर निकलें

मेरे पास पोस्ट बिल्ड इवेंट वाली परियोजना है:

copy $(ProjectDir)DbVerse\Lunaverse.DbVerse.*.exe  $(TargetDir)

यह मेरी मशीन पर हर बार ठीक काम करता है। मेरे पास एक नया डेवलपर है जो हमेशा "कोड 1 के साथ बाहर" त्रुटि प्राप्त करता है। मैंने उसे एक डॉस प्रॉम्प्ट में एक ही कमांड चलाया था, और यह ठीक काम किया। ऐसा किसके कारण हो सकता है? क्या वास्तविक त्रुटि के लिए कोई रास्ता है?

हम दोनों विजुअल स्टूडियो 2008 का उपयोग कर रहे हैं।.

102
Tim Scott

वह अपने पथ में फ़ोल्डर नामों में से एक में एक स्थान था, और इसके आसपास कोई उद्धरण नहीं था।.

110
Tim Scott

"पिंग्स" के साथ एक ने मेरी मदद की ... लेकिन थोड़ा बेहतर समझाया जा सकता है ...

मेरे लिए समाधान बदलना था:

copy $(TargetDir)$(TargetName).* $(SolutionDir)bin

इसके लिए:

copy "$(TargetDir)$(TargetName).*" "$(SolutionDir)bin"

आशा है कि यह आप के लिए काम करता है। :-)

57
JanBorup

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

44
Shalini

मैंने इसे भविष्य के आगंतुकों के लिए जोड़ा है क्योंकि यह काफी सक्रिय प्रश्न है।

ROBOCOPY "सफलता कोड" के साथ बाहर निकलता है जो 8 के अंतर्गत आता है। देखें: http://support.Microsoft.com/kb/954404

इस का मतलब है कि:

robocopy exit code 0 = no files copied
robocopy exit code 1 = files copied
When the result is 1, this becomes an error exit code in visual studio.

तो मैंने इसे हल किया आसानी से इसे बैच फ़ाइल के नीचे जोड़कर

exit 0

सुझाव है कि इस तरह से ROBOCOPY त्रुटियों को संभालें

rem each robocopy statement and then underneath have the error check.
if %ERRORLEVEL% GEQ 8 goto failed

rem end of batch file
GOTO success

:failed
rem do not pause as it will pause msbuild.
exit 1

:success
exit 0    

कोई फ़ाइल कॉपी नहीं किए जाने पर भ्रम सेट हो जाएगा। VS में कोई त्रुटि नहीं है। तब जब परिवर्तन होते हैं, तो फ़ाइलें कॉपी हो जाती हैं, VS त्रुटि लेकिन वह सब कुछ जो डेवलपर चाहता था।} _

अतिरिक्त सुझाव: स्क्रिप्ट का उपयोग न करें क्योंकि यह वी.एस. बिल्ड में एक अनिश्चित समय का ठहराव बन जाएगा। स्क्रिप्ट को विकसित करते समय, timeout 10 जैसी किसी चीज़ का उपयोग करें। आप इसे नोटिस करेंगे और इसे लटकाएंगे बजाय टिप्पणी करें ।

41
Valamas

SysInternals से प्रक्रिया की निगरानी करें इसे Lunaverse.DbVerse (पथ क्षेत्र पर) ऑपरेशन परिणाम पर देखने के लिए सेट करें। यह वहां से स्पष्ट होना चाहिए कि क्या गलत हुआ

11
Asher

मुझे अपनी पोस्ट-बिल्ड कॉपी को OS संरक्षित करने के लिए "..\_" Common7\IDE\PrivateAssemblies "काम करने के लिए वी.एस. को प्रशासक के रूप में चलाना था।

7
wruckie

उन लोगों के लिए, जो 'कॉपी' कमांड इन बिल्ड इवेंट्स (प्री-बिल्ड इवेंट कमांड लाइन या/और पोस्ट-बिल्ड इवेंट कमांड लाइन से प्रोजेक्ट -) का उपयोग करते हैं > गुण: आप 'कॉपी' कमांड पैरामीटर यहाँ दिखना चाहिए: copy "source of files" "destination for files"। उद्धरण चिह्नों का उपयोग करना याद रखें (पते के तारों में रिक्त स्थान के साथ समस्याओं से बचने के लिए)।.

5
Bohdan Kuts

मेरे पास एक समान मुद्दा था लेकिन विशेष रूप से जेनकींस के निर्माण के माहौल में। समस्या को ठीक करने के लिए, मैंने पोस्ट बिल्ड ईवेंट में एक कॉपी कमांड का उपयोग करके कॉपी लक्ष्य का उपयोग करने से स्विच किया।.

मैंने इसे बदल दिया:

   <PropertyGroup>
      <PostBuildEvent>copy $(ProjectDir)bin\BLAH.Common.xml $(ProjectDir)App_Data\BLAH.Common.xml</PostBuildEvent>
   </PropertyGroup>

इसके लिए:

  <Target Name="AfterBuild">
    <Copy SourceFiles="$(ProjectDir)bin\BLAH.Common.xml" DestinationFolder="$(ProjectDir)App_Data\" />
  </Target>

और यह अब ठीक काम करता है।.

मुझे मिलने वाली विशिष्ट त्रुटि थी:

(PostBuildEvent target) -> 
  C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(4291,5): error MSB3073: The command "copy <http://1.2.3.4/job/BLAHv2/ws/Api/bin/BLAH.Common.xml> <http://1.2.3.4/job/BLAHv2/ws/Api/App_Data/BLAH.Common.xml"> exited with code 1. [<http://1.2.3.4/job/BLAHv2/ws/Api/Api.csproj]>
3
TechSavvySam

मैं विजुअल स्टूडियो को एडमिन के रूप में चलाकर अपने कोड 1 को ठीक करने में सक्षम था। जाहिरा तौर पर इसमें बिना व्यवस्थापक के शेल कमांड को निष्पादित करने की पहुंच नहीं थी।.

3
jdurden

मेरे लिए मुझे यह सुनिश्चित करना था कि जिस प्रोग्राम को मैं फाइल कॉपी कर रहा था वह उस समय नहीं चल रहा था। वाक्य रचना में कोई त्रुटि नहीं थी। आशा है कि यह किसी की मदद करता है।.

2
Richard S.

अच्छे अभ्यास के रूप में, मेरा सुझाव है कि आप पोस्ट बिल्ड इवेंट को MS बिल्ड फ़ाइल कॉपी कार्य के साथ बदलें।.

2
Asher

ठीक है, यह कई समाधानों के साथ एक समस्या है, इसलिए मैं बस लोगों को अधिक संकेत देने के लिए मेरा पोस्ट करता हूं। मेरी स्थिति यह है कि अपने पथ के फ़ोल्डरों की दोबारा जांच करें और सुनिश्चित करें कि वे सभी आपके मशीन में मौजूद हैं। उदाहरण के लिए: "$ (SolutionDir)\partBin\Bin\$ (ProjectName) .pdb", लेकिन "बिन" partBin फ़ोल्डर में नहीं है।.

2
David

उन लोगों के लिए, जो प्रोजेक्ट से बिल्ड इवेंट्स (प्री-बिल्ड इवेंट कमांड लाइन या/और पोस्ट-बिल्ड इवेंट कमांड लाइन) में 'कॉपी' कमांड का उपयोग करते हैं -> गुण: लक्ष्य फ़ोल्डर मौजूद होना चाहिए

2
syned

मुझे बस वही त्रुटि मिली। मेरे पास गंतव्य पथ में एक% था जिससे बचने की आवश्यकता थी

c:\projects\%NotAnEnvironmentVariable%

होना चाहिए

c:\projects\%%NotAnEnvironmentVariable%%
2
firedfly

फिर भी एक और जवाब ...

मेरे मामले में मेरे पास .Net Standard 1.3 और .Net फ्रेमवर्क 2.0 दोनों को लक्षित करने वाला एक Visual Studio 2017 प्रोजेक्ट था। यह इस तरह .csproj फ़ाइल में निर्दिष्ट किया गया था:

<TargetFrameworks>netstandard1.3;net20</TargetFrameworks>

मेरे पास इस तरह की पोस्ट-बिल्ड इवेंट कमांड लाइन भी थी:

copy "E:\Yacks\YacksCore\YacksCore\bin\net20\Merlinia.YacksCore.dll" "E:\Merlinia\Trunk-Debug\Shared Bin\"

दूसरे शब्दों में, मैं .Net फ्रेमवर्क की प्रतिलिपि बनाने की कोशिश कर रहा था। निर्माण के लिए वैकल्पिक स्थान पर निर्मित।.

जब मैंने एक पुनर्निर्माण किया था तो यह इस त्रुटि के साथ विफल हो रहा था:

MSB3073 The command "copy "E:\Yacks\YacksCore\YacksCore\bin\net20\Merlinia.YacksCore.dll" "E:\Merlinia\Trunk-Debug\Shared Bin\"" exited with code 1.

बहुत हताशा के बाद मैंने अंत में यह निर्धारित किया कि क्या हो रहा था कि पुनर्निर्माण ने सभी आउटपुट फ़ाइलों को हटा दिया, फिर बिल्ड .Net मानक 1.3 किया, फिर पोस्ट-बिल्ड इवेंट कमांड लाइन को चलाने की कोशिश की, जो विफल हो गई क्योंकि फ़ाइल की प्रतिलिपि बनाई जा अभी तक नहीं बनाया गया था।.

तो समाधान भवन के क्रम को बदलने का था, अर्थात, .Net फ्रेमवर्क 2.0 के लिए निर्माण, फिर .Net मानक 1.3 के लिए।.

<TargetFrameworks>net20;netstandard1.3</TargetFrameworks>

यह अब मामूली गड़बड़ के साथ काम करता है कि पोस्ट-बिल्ड इवेंट कमांड लाइन को दो बार चलाया जा रहा है, इसलिए फ़ाइल को दो बार कॉपी किया जाता है।.

0
RenniePet

मेरे मामले में मुझे बैट फ़ाइल को कॉल करने से पहले cd (परिवर्तन निर्देशिका) करना पड़ा, क्योंकि बैट फ़ाइल के अंदर एक कॉपी ऑपरेशन था जो सापेक्ष पथ निर्दिष्ट करता था।.

:: Copy file
cd "$(ProjectDir)files\build_scripts\"
call "copy.bat"
0
CrazyTim

मेरे पास यही मुद्दा था और यह पता चला कि ऐसा इसलिए था क्योंकि मैंने परियोजना का नाम बदल दिया था। मैं प्रोजेक्ट की संपत्तियों में गया और असेंबली का नाम और रूट नेमस्पेस को प्रोजेक्ट के नाम में बदल दिया और इसके बाद बहुत अच्छा काम किया!

0
golgothan3

इतने सारे उपाय ...

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

0
Tengiz