ভিজ্যুয়াল স্টুডিও: একাধিক পোস্ট বিল্ড কমান্ড?


101

ভিজ্যুয়াল স্টুডিও ২০০৮ আমাকে একটি কমান্ড ঘোষণা করতে এবং একটি প্রকল্পের জন্য এটি বিল্ড পরবর্তী ইভেন্টের সাথে সংযুক্ত করতে দেয়। অনেকগুলি বিকাশকারীদের মতো, আমি এটিকে অ্যাপ্লিকেশন আউটপুট ডিরেক্টরিতে ফাইলগুলি এক্সকপি করার জন্য নিয়মিত ব্যবহার করি।

আমি এমন একটি প্রকল্পে কাজ করছি যেখানে আমার একক প্রকল্পের মধ্যে দুটি আলাদা জায়গা থেকে দুটি পৃথক গন্তব্য পর্যন্ত ফাইলগুলি এক্সকপি করা দরকার। অন্য কথায়, আমাকে একই পোস্ট-বিল্ড ইভেন্ট থেকে দুটি পৃথক এক্সকপি কমান্ড চাওয়া দরকার। দেখে মনে হচ্ছে বিল্ড-পরবর্তী ইভেন্টটি কেবল একটি কমান্ড নেবে এবং যদি আমাকে একাধিক কমান্ডের প্রয়োজন হয়, আমাকে কমান্ডগুলিকে একটি * .bat ফাইলে রাখতে হবে এবং পোস্ট-বিল্ড ইভেন্ট থেকে কল করতে হবে।

এটি কি সঠিক, বা বিল্ড-পরবর্তী ইভেন্ট থেকে দুটি কমান্ড চাওয়ার কোনও সহজ উপায় আছে? আপনার সাহায্যের জন্য আগাম ধন্যবাদ।

উত্তর:


124

আপনি যতগুলি পোস্ট বিল্ড কমান্ড চান তা টাইপ করতে পারেন। কেবল নিউলাইন দ্বারা এগুলি পৃথক করুন।

আমার প্রকল্পগুলির একটির উদাহরণ এখানে।

পোস্ট বিল্ড ইভেন্ট কমান্ডলাইন


3
স্ক্রিন-শট অন্তর্ভুক্ত কেবল তখনই কার্যকর যদি আপনি এটিকে চিরতরে হোস্ট করতে চান।
আমন্ডালিশাস

1
@ ওওয়েনজে 23 ... বা এই ক্ষেত্রে 'ইমেজস্যাক';)
অ্যান্টনি ওয়ালশ

27
পৃথক লাইনে থাকা সত্ত্বেও, আমার কমান্ডগুলি একসাথে চালিত হচ্ছে যেন তারা একটি লাইনে ছিল।
ট্রেভর

6
দুর্ভাগ্যক্রমে, মনে হয় যে অন্তর্বর্তী কমান্ডগুলির মধ্যে একটি ব্যর্থ হলে কমপক্ষে VS2015 ত্রুটির খবর দেয় না ... এটি বিল্ড পরবর্তী পদক্ষেপের ফলে শেষ কমান্ডের ফলাফলের প্রতিবেদন করে।
জোহানেস এস 12

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

107

গুরুত্বপূর্ণ: একটি ব্যাচ ফাইল চালনার সময়, নিম্নলিখিত লাইনগুলি সম্পাদন করার জন্য আপনাকে অবশ্যই "কল" বিবৃতিটি ব্যবহার করতে হবে। আপনি যদি "কল" ব্যবহার না করেন তবে এক্সিকিউশনটি .bat এ চলে যায় এবং নিম্নলিখিত লাইনে ফিরে আসে না। ডস প্রম্পটে যেমন রয়েছে।

উদাহরণ:

call MyBatch1.bat
call MyBatch2.bat

3
এই টিপটি গ্রান্ট এবং এনপিএম কমান্ডের ক্ষেত্রে প্রযোজ্য যেহেতু তারা উভয়ই ব্যাচ ফাইলের মাধ্যমে চালিত হয় (গ্রান্ট সিএমডি এবং এনএমপিএইচএমডি)।
ম্যাট ভারব্লো

16

আরও একটি বিকল্প রয়েছে: আপনি কমান্ডগুলি পৃথক করতে পারেন &&। যেমন

copy $(TargetPath) d:\folder1 && copy $(TargetPath) d:\folder2

এটি নতুন &&লাইনের সাথে আলাদা করার মতো নয়: পূর্ববর্তী কমান্ডটি ব্যর্থ হলে, পরবর্তী কমেন্ট চলবে না।

নিউলাইন দ্বারা পৃথক করা পড়া সহজ, সুতরাং আপনার এটি পছন্দ করা উচিত। তবে আমি কমপক্ষে একটি ক্ষেত্রে জানি যখন &&দরকারী। আপনি যখন বিভিন্ন মেশিনে পোস্ট-বিল্ডের বিভিন্ন পদক্ষেপ রাখতে সম্পত্তি শীট ব্যবহার করেন তখন এটি দৃশ্যপট। ভিএস ২০০ সরাসরি প্রোপার্টি শীটগুলিতে পোস্ট বিল্ডস্টেপ সেট করার অনুমতি দেয় না তবে আপনি আপনার কমান্ডের সাহায্যে কোনও ব্যবহারকারী ম্যাক্রো যুক্ত করতে পারেন এবং এটির মূল প্রকল্প সেটিংস থেকে কল করতে পারেন। একটি ম্যাক্রো একক লাইন, তাই আপনি &&সেখানে একাধিক কমান্ড ব্যবহার করতে পারেন।


11

প্রতিটি কমান্ড পৃথক লাইনে থাকা উচিত। তবে আমি যা পেয়েছি তা হ'ল যদি সেই কমান্ডগুলির মধ্যে একটি কার্যকর করতে ত্রুটি থাকে তবে পুরো পোস্ট-বিল্ডটি ব্যর্থ হয় এবং তাই আপনাকে ডিবাগ করার জন্য প্রতিটি পোস্ট-বিল্ড কমান্ড একবার চেষ্টা করতে হবে।


2
"xcopy / f" সম্পূর্ণ উত্স এবং লক্ষ্য ফাইল নামটি প্রদর্শন করবে যা ব্যর্থতার পূর্বে মুদ্রণ করা হবে, একাধিক অনুলিপি কমান্ডের চেয়ে একাধিক xcopy কমান্ড নির্ণয় করা সহজ করে।
yoyo

9

কমান্ডগুলি & এবং & & অথবা এর সাথে পৃথক করা; VS2017 এ কাজ করে না। বিশ্বাস করা যায় না এমন সাধারণ কার্যকারিতা ভিএস2017 এ উপলব্ধ নয়। ভিজ্যুয়াল স্টুডিও একটি পোস্ট হিসাবে বিল্ড ইভেন্ট ইভেন্ট উইন্ডোতে পুরো পাঠ্যকে কার্যকর করার চেষ্টা করে। আমার পক্ষে এখন কেবলমাত্র একটি ব্যাচ স্ক্রিপ্ট তৈরি করা যা আমি বিশেষত পছন্দ করি না।


1
কমান্ডগুলি পৃথক করে && আমার সাথে কাজ করে ভিএস2017। ভিএস ২০১7 এডিটরটিতে পৃথক লাইনে প্রতিটি কমান্ড উল্লেখ করা আমার পক্ষে কাজ করে না।
কোডনিফার 13:58

5

Womp এর উত্তর যোগ করা :

একই বিল্ড ইভেন্টে কিছু করার জন্য যদি আপনার একাধিক সম্পত্তি শীট থাকে তবে আপনি আদেশগুলি শৃঙ্খলাবদ্ধ করতে নিম্নলিখিতগুলি করতে পারেন:

%(Command)
echo foo

যেখানে %(Command)কমান্ডের আগের মানটিতে প্রসারিত হয়।

ব্যক্তিগতভাবে আমি সমস্ত বিল্ড ইভেন্টের জন্য এটি করি , যদিও আমার কাছে বর্তমানে উত্তরাধিকারসূত্রে প্রাপ্ত কমান্ড না রয়েছে, কারণ এটি নিশ্চিত করে যে আমি পরে সম্পত্তি পত্রক যুক্ত করলে কোনও সমস্যা হবে না।


1
এটি কাস্টম বিল্ড ধাপের সাথেও কাজ করে। এছাড়াও, exitচেইন বরাবর যে কোনও জায়গায় ব্যাচের বিবৃতি কার্যকর করার ফলে চেইনটি বাতিল হয়ে যায়। প্রকৃতপক্ষে exit 1যখন ব্যর্থ বিল্ড ঘটায় exit 0মাত্র পদক্ষেপ aborts এবং বিল্ড চলতে থাকে।
মার্টিন কনেল

3

ভিজ্যুয়াল স্টুডিও 2017 এ আপনি এটি করতে পারেন:

<PostBuildEvent>
    <Command>
        copy $(TargetPath) $(SolutionDIr)\bin1
        copy $(TargetPath) $(SolutionDIr)\bin2
    </Command>
</PostBuildEvent>

1
আমি .csproj সম্পাদনা করেছি এবং আমার দুটি পোস্টবিল্ড ইভেন্ট কমান্ডের চারপাশে <কম্যান্ড> </command> যুক্ত করেছি। কাজ করে বলে মনে হচ্ছে না। আমি যখন ভিজ্যুয়াল স্টুডিওতে বিল্ড ইভেন্টগুলি দেখেছি, তখন এটি দুটি কমান্ডের চারপাশে <কম্যান্ড> </command> ছিল, তবে একটি বিল্ড ত্রুটি দিয়েছে: "<কমান্ড xMLns =" ​​.. "> কমান্ড 1 কমান্ড 2 </command>" 255 কোড সহ প্রস্থান করা হয়েছে
জিমি

1

Womp দ্বারা প্রস্তাবিত পদ্ধতির ভিজ্যুয়াল স্টুডিও 2015/2017 (উইন্ডোজ) এ কাজ করে তবে ম্যাকের জন্য ভিজ্যুয়াল স্টুডিওতে (পূর্বরূপ) কাজ করে না, যা মনে হয় কেবল কমান্ডগুলির মধ্যে প্রথমটি কার্যকর করে। ভিজ্যুয়াল স্টুডিওর ম্যাক এবং উইন্ডোজ উভয় সংস্করণেই আমি যে একমাত্র পদ্ধতির কাজ দেখতে পেয়েছি তা 2 এমএসবিল্ড কমান্ড শৃঙ্খলাবদ্ধ ছিল:

<Target Name="AfterResolveReferences">
<Exec Command="path\MyFirstCommand.exe -parameters" />
</Target>
<Target Name="MySecondCommand" AfterTargets="AfterResolveReferences" >
<Exec Command="path\MySecondCommand.exe -parameters" />
</Target>

উপরের উদাহরণটি "আফটার রেজোলিউর রেফারেন্সগুলি" ইভেন্টটি ব্যবহার করে তবে অবশ্যই পোস্ট বিল্ড ইভেন্টের জন্য কাজ করা উচিত।


1

এই সমস্যার কোনও ভাল সমাধান নেই। কল ধারণাটি অন্যান্য স্ক্রিপ্টগুলি চালিত করে। আমি লক্ষ্য করেছি যে ত্রুটি সনাক্তকরণ কাজ করবে না। FailMe.cmd এ 'প্রস্থান / খ 1' রাখুন পোস্ট বিল্ডিং পদক্ষেপগুলিতে 'কল FailMe.cmd' ব্যবহার করুন। বিল্ড ব্যর্থ হয় না লক্ষ্য করুন? আমি ভিএস 2017 ব্যবহার করছি একটি সি # প্রকল্প তৈরি করে। এখন এটি 'FailMe.cmd' দিয়ে ব্যবহার করে দেখুন বিল্ডটি এখন একটি ত্রুটির খবর দেয়।

সুতরাং ত্রুটি প্রতিবেদন করা যদি গুরুত্বপূর্ণ হয় তবে আপনি কেবল একটি একক স্ক্রিপ্ট ব্যবহার করা ভাল।


-4

আপনার ব্যাচের স্ক্রিপ্টে কেবল "কল" উপসর্গ করুন। সুতরাং ব্যাচের স্ক্রিপ্টের নীচে থাকা বিবৃতিগুলিও ব্যাচ স্ক্রিপ্ট থেকে কল ফিরিয়ে দেওয়ার পরে কার্যকর করা হয়।

call Script1.cmd
call Script2.bat
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.