পোস্ট বিল্ড কোড 1 সহ প্রস্থানিত


107

আমার একটি পোস্ট বিল্ড ইভেন্ট সহ একটি প্রকল্প রয়েছে:

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

এটি আমার মেশিনে প্রতিটি সময় কাজ করে। আমার একটি নতুন বিকাশকারী রয়েছে যিনি সর্বদা "কোড 1 সহ প্রস্থানিত" ত্রুটি পান। আমি তার ডস প্রম্পটে একই কমান্ডটি চালাতে পেরেছিলাম এবং এটি দুর্দান্ত কাজ করেছে। কি এই সৃষ্টি হতে পারে? আসল ত্রুটিতে যাওয়ার কোনও উপায় আছে কি?

আমরা দুজনেই ভিজ্যুয়াল স্টুডিও 2008 ব্যবহার করছি।


আমার ক্ষেত্রে, টিম স্কট উত্তরটি এই পৃষ্ঠার শেষের কাছে সরবরাহ করে (সুতরাং আমি প্রথম দিকে উপেক্ষা করব) আমার সমস্যাটি সমাধান করে।
ইউ ইয়াং জিয়ান

উত্তর:


115

তার পাথের একটি ফোল্ডারের নামের মধ্যে তার স্থান ছিল এবং এর চারপাশে কোনও উদ্ধৃতি নেই।


12
পথের নামগুলিতে উদ্ধৃতি স্থাপন করা একটি ভাল অনুশীলন। স্থান থাকা পথগুলিতে কাজ না করা ইভেন্টটি আরও ভাল :-)
আশের

4
copy / y "$ (TargetDir) Dotfuscated।" "$ (TargetDir)" এই কমান্ডটি আমার জন্য কাজ করছে এবং যদি আমি শেষে 0 প্রস্থান লিখি তবে ঠিকঠাক কাজ করুন। আপনি আমাকে বলতে পারেন কেন?
রিকিন প্যাটেল

59

"পিংস" সহকারে সে আমাকে সাহায্য করেছিল ... তবে আরও কিছুটা ভাল ব্যাখ্যা করা যেতে পারে ...

আমার জন্য সমাধানটি পরিবর্তন করা ছিল:

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

এটি:

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

আশা করি এটা তোমার জন্য কাজ করবে। :-)


47

আমি এটি ভবিষ্যতের দর্শকদের জন্য যুক্ত করেছি কারণ এটি বেশ সক্রিয় প্রশ্ন।

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    

কোনও ফাইল অনুলিপি না করা = ভিএস-তে কোনও ত্রুটি না হলে বিভ্রান্তি সেট হয়ে যাবে তারপরে যখন পরিবর্তন হয়, ফাইলগুলি অনুলিপি করা হয়, ভিএস ত্রুটিগুলি কিন্তু বিকাশকারী যা চান তার সবই সম্পন্ন হয়েছিল।

অতিরিক্ত টিপ: স্ক্রিপ্টে কোনও বিরতি ব্যবহার করবেন না কারণ এটি ভিএস বিল্ডে অনির্দিষ্ট বিরতি হয়ে যাবে। স্ক্রিপ্টটি বিকাশ করার সময়, এর মতো কিছু ব্যবহার করুন timeout 10। আপনি এটি লক্ষ্য করবেন এবং একটি ঝুলন্ত বিল্ডের চেয়ে মন্তব্য করবেন।


4
শুধু আমি যা খুঁজছিলাম। ধন্যবাদ !!
রিকি 16

এটির জন্য 8 বছরের পুরানো উত্তরটি বাম্পিং করা, আপনি যদি ওয়ান-লাইনার চান, এবং কোনও ব্যাট ফাইল না চান, আপনি বিল্ড-পরবর্তী ইভেন্টের স্ট্রিংয়ের শেষে একটি "& প্রস্থান 0" যুক্ত করতে পারেন।
এরিক উউ

46

কোড 1 এর জন্য আমার কারণ হ'ল লক্ষ্য ফোল্ডারটি কেবল পঠনযোগ্য। আশা করি এটি কাউকে সাহায্য করবে! একটি ডিরেক্টরি থেকে অন্য ডিরেক্টরিতে অনুলিপি করার জন্য আমার একটি পোস্ট বিল্ড ইভেন্ট ছিল এবং গন্তব্যটি কেবল পঠিত হয়েছিল। সুতরাং আমি কেবল গিয়েছিলাম এবং কেবলমাত্র ডিরেক্টরি এবং এর সমস্ত উপ-ডিরেক্টরিতে পঠনযোগ্য অ্যাট্রিবিউটটি পরীক্ষা করেছিলাম! এটি নিশ্চিত করুন যে এটির জন্য এটি নিরাপদ যে কোনও ডিরেক্টরি!


আমাকে এক ঘন্টা বাঁচিয়েছে, ধন্যবাদ! ইন্টারনেট থেকে কিছু কোড ডাউনলোড হয়েছে এবং উইন্ডোজ 7 ফোল্ডারটি কেবল স্বয়ংক্রিয়ভাবে পঠনের জন্য সেট করে।
জোহান পিটারসন

1
আমি পরিবর্তে এবং / ওয়াই পতাকা সহ এক্সকপি ব্যবহার করেছি। সমস্ত কমান্ড মাইক্রোসফ্ট
রিসোর্সস / ডকুমেন্টেশন / উইন্ডোস / এক্সপ /


8

কোনও ওএস সুরক্ষিত আমার পোস্ট-বিল্ড অনুলিপি পেতে আমাকে প্রশাসক হিসাবে ভিএস চালাতে হয়েছিল ".. 7 সাধারণ 7 7 আইডিই \ প্রাইভেটএজেম্বলিস" কাজ করতে


5

যারা, যারা 'ব্যবহার করার জন্য কপি মধ্যে' কম্যান্ড বিল্ড ঘটনাবলী ( প্রি-বিল্ড ঘটনা কমান্ড লাইন অথবা / এবং পোস্ট-বিল্ড ঘটনা কমান্ড লাইন ) থেকে প্রকল্প -> প্রোপার্টি : আপনি ' কপি ' কম্যান্ড পরামিতি এখানে মত হওয়া উচিত: copy "source of files" "destination for files"। উদ্ধৃতি চিহ্ন ব্যবহার করতে ভুলবেন না (ঠিকানার ফাঁকে ফাঁকে কোনও সমস্যা এড়াতে)।


4

আমার একই রকম সমস্যা ছিল তবে বিশেষত জেনকিনস বিল্ড পরিবেশে। সমস্যাটি সমাধান করার জন্য, আমি পোস্ট বিল্ড ইভেন্টে একটি অনুলিপি কমান্ড ব্যবহার করে একটি অনুলিপি লক্ষ্য ব্যবহার করে স্যুইচ করেছি।

আমি এটি পরিবর্তন করেছি:

   <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]>

কীভাবে আপনি এই পরিবর্তন করেছেন? আপনি ম্যানুয়ালি এডিট করেছেন? আপনি কিভাবে লক্ষ্য নির্বাহ করবেন? এটি দেখতে আপনাকে এমএসবিল্ড কমান্ড লাইনে এমন কিছু নির্দিষ্ট করতে হবে বলে মনে হচ্ছে। আমার জেনকিন্স পরিবেশে ঠিক একই সমস্যা আছে যা অদ্ভুত কারণ এমএসবিল্ডের তৈরি সমস্ত ফোল্ডার সর্বদা পঠনযোগ্য। এটি কেন আমার মেশিনে জরিমানা অনুলিপি করে তবে সার্ভারে নেই তা আমার বাইরে।
shawn1874

আমি সবেমাত্র নোটপ্যাড ++ ব্যবহার করেছি সিএসপিজেজ ফাইল সম্পাদনা করার জন্য। "আফটারবিল্ড" হুক একটি স্ট্যান্ডার্ড হুক, তাই এটি উপস্থিত থাকলে বিল্ড প্রক্রিয়া শেষে এটি স্বয়ংক্রিয়ভাবে বলা হয়।
টেকস্যাভিভিসাম

ধন্যবাদ। আমি নিশ্চিত ছিলাম না যে আপনার কাছে একটি লক্ষ্য সহ একটি কাস্টম এমএসবিল্ড ফাইল আছে বা এটি কেবল ভিজ্যুয়াল স্টুডিওর তৈরি ফাইল was এফওয়াইআই: আমার ক্ষেত্রে আমি বুঝতে পেরেছিলাম যে বিল্ড অর্ডার নিয়ে সমস্যাটি ছিল। আমি রিলিজ, সমাধান কনফিগারেশনের ক্ষেত্রে বিল্ড নির্ভরতা নির্ধারণ করতে ভুলে গিয়েছি যাতে প্রকল্পগুলি সার্ভারে অন্যরকম ক্রমে তৈরি করছিল যাতে অনুলিপি কার্যকর হওয়ার পরে ইনপুট ফাইলটি এখনও উপলব্ধ ছিল না। এটি নিশ্চিত করা যে .dll অন্য প্রকল্পের আগে তৈরি করা হয়েছিল যা এটির প্রয়োজন ছিল এটি আমার জন্য স্থির করে। সমাধান কনফিগারেশনের কারণে এটি খুব সূক্ষ্ম একটি সমস্যা ছিল।
shawn1874

এটি প্রথমে স্পষ্ট ছিল না যে বিল্ড অর্ডার প্রতিটি কনফিগারেশনের জন্য। আমি ভেবেছিলাম যে এটি একটি সমাধান সেটিং আরও ছিল তবে স্পষ্টতই আপনাকে সমস্ত কনফিগারেশনে বিল্ড অর্ডার আপডেট করতে হবে।
shawn1874

3

আমি অ্যাডমিন হিসাবে ভিজ্যুয়াল স্টুডিও চালিয়ে আমার কোড 1 ঠিক করতে সক্ষম হয়েছি। স্পষ্টতই অ্যাডমিন ছাড়া শেল কমান্ড কার্যকর করতে এর অ্যাক্সেস নেই।



2

আমার জন্য আমাকে নিশ্চিত করতে হয়েছিল যে আমি যে প্রোগ্রামটির ফাইল ফাইল করছি তা সেই সময় চলছিল না। সিনট্যাক্সে কোনও ত্রুটি ছিল না। আশা করি এটি কাউকে সাহায্য করবে।


2

আমি ঠিক একই ত্রুটি পেয়েছি। আমার গন্তব্য পথে এমন একটি% ছিল যা পালাতে হবে

c:\projects\%NotAnEnvironmentVariable%

দরকার ছিল

c:\projects\%%NotAnEnvironmentVariable%%

2

ঠিক আছে, এটি অনেকগুলি সমাধানে সমস্যা, তাই আমি লোককে আরও ইঙ্গিত দেওয়ার জন্য আমার পোস্ট করি। আমার অবস্থা হ'ল আপনার পথে ফোল্ডারগুলি দ্বিগুণ পরীক্ষা করা এবং এটি নিশ্চিত করা যে সেগুলি আপনার মেশিনে বিদ্যমান রয়েছে। উদাহরণস্বরূপ: "$ (সলিউশনডির) \ পার্টবিন \ বিন \ $ (প্রজেক্টনাম) .পিডিবি", তবে "বিন" পার্টবিন ফোল্ডারে নেই।


1
বিটিডাব্লু, \ পরে $(SolutionDir)অপ্রয়োজনীয়।
ডায়াবলো

2

প্রকল্পগুলির -> বৈশিষ্ট্যগুলি: টার্গেট ফোল্ডারটি থাকা থেকে যারা বিল্ড ইভেন্টস (প্রাক-বিল্ড ইভেন্ট কমান্ড লাইন বা / এবং পোস্ট-বিল্ড ইভেন্ট কমান্ড লাইন) -এ 'অনুলিপি' কমান্ড ব্যবহার করেন তাদের জন্য


0

অনেক সমাধান ...

আমার ক্ষেত্রে আমাকে নন-ইউনিকোড (ওয়েস্টার্ন, উইন্ডোজ) এনকোডিং সহ ব্যাট ফাইলটি সংরক্ষণ করতে হয়েছিল। ডিফল্টরূপে যখন আমি ভিজ্যুয়াল স্টুডিওতে ফাইল যুক্ত করেছি (এবং সম্ভবত আমার এটি ভিএস এর বাইরে করা উচিত ছিল), এটি ইউটিএফ -8 এনকোডিংয়ের সাথে যুক্ত হয়েছিল।


0

আমার এই একই সমস্যা ছিল এবং এটি প্রমাণিত হয়েছিল যে এটির কারণেই আমি প্রকল্পটির নামকরণ করেছি। আমি প্রকল্পের বৈশিষ্ট্যগুলিতে গিয়ে অ্যাসেম্বলির নাম এবং রুট নেমস্পেসকে প্রকল্পের নামে পরিবর্তন করেছি এবং এটির পরে এটি দুর্দান্ত কাজ করেছে!


0

তবুও অন্য উত্তর ...

আমার ক্ষেত্রে আমার কাছে একটি ভিজ্যুয়াল স্টুডিও 2017 প্রকল্প ছিল। নেট স্ট্যান্ডার্ড 1.3 এবং নেট ফ্রেমওয়ার্ক 2.0। এটি .csproj ফাইলে এভাবে নির্দিষ্ট করা হয়েছিল:

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

আমারও পোস্ট-বিল্ড ইভেন্ট ইভেন্ট কমান্ড লাইন ছিল:

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

অন্য কথায় আমি। নেট ফ্রেমওয়ার্ক কপি করার চেষ্টা করছিলাম। DL বিল্ড দ্বারা উত্পাদিত একটি বিকল্প জায়গায়।

যখন আমি একটি পুনর্নির্মাণ করি তখন এটি এই ত্রুটির সাথে ব্যর্থ হয়েছিল:

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

অনেক হতাশার পরে অবশেষে আমি স্থির করেছিলাম যে যা হচ্ছিল তা হ'ল পুনর্নির্মাণ সমস্ত আউটপুট ফাইল মুছে ফেলল, তারপরে। নেট স্ট্যান্ডার্ড 1.3 এর জন্য বিল্ড তৈরি করেছিল, তারপরে বিল্ড-পরবর্তী ইভেন্ট কমান্ড লাইনটি চালানোর চেষ্টা করেছিল, যা ব্যর্থ হয়েছিল কারণ ফাইলটি অনুলিপি করা হয়নি এখনও নির্মিত হয়নি।

সুতরাং সমাধানটি ছিল বিল্ডিংয়ের ক্রম পরিবর্তন করা, অর্থাত্। নেট ফ্রেমওয়ার্ক 2.0 এর জন্য প্রথমে তৈরি করুন, তারপরে। নেট স্ট্যান্ডার্ড 1.3 এর জন্য।

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

এটি এখন কাজ করে, মাইনর গ্ল্যামের সাথে যে পোস্ট-বিল্ড ইভেন্ট ইভেন্ট কমান্ড লাইনটি দুটি চালানো হচ্ছে, তাই ফাইলটি দু'বার অনুলিপি করা হয়েছে।


0

আমার ক্ষেত্রে cdব্যাট ফাইলটি কল করার আগে আমাকে (ডিরেক্টরি পরিবর্তন করতে হয়েছিল), কারণ ব্যাটের ফাইলের অভ্যন্তরে একটি অনুলিপি অপারেশন ছিল যা আপেক্ষিক পাথ নির্দিষ্ট করে দেয়।

:: Copy file
cd "$(ProjectDir)files\build_scripts\"
call "copy.bat"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.