কেবলমাত্র ডিবাগ বিল্ডের জন্য কীভাবে ভিজ্যুয়াল স্টুডিও পোস্ট-বিল্ড ইভেন্টগুলি চালানো যায়


592

আমি কীভাবে আমার পোস্ট-বিল্ড ইভেন্টগুলিকে কেবল এক ধরণের বিল্ডের জন্য চলতে সীমাবদ্ধ রাখতে পারি?

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

উত্তর:


746

প্রাক- এবং পোস্ট-বিল্ড ইভেন্টগুলি ব্যাচের স্ক্রিপ্ট হিসাবে চলমান। আপনি একটি শর্তাধীন বিবৃতি করতে পারেন $(ConfigurationName)

এই ক্ষেত্রে

if $(ConfigurationName) == Debug xcopy something somewhere

7
আশ্চর্যজনক, সম্ভবত এটি কেবল আমার তবে আমি শর্তটি যুক্ত করার চেষ্টা করেছি এবং এখন আমি এই ত্রুটিটি পেয়েছি - 255 কোড দিয়ে ত্রুটিটি উপস্থিত হয়েছে
মাইকেল এল

101
আমি খুঁজে পেয়েছি যে পুরো কমান্ডটি এক লাইনে থাকা দরকার বা আপনি "কোড 255 সহ প্রস্থানিত" পেয়ে যাবেন
রবিন মিন্টো

7
আপনি সম্পূর্ণ সমাধানের জন্য গোটোস / লেবেলও ব্যবহার করতে পারেন (আমার জুলাই 24 উত্তরটি দেখুন)
সেষ্টলএগ্যালারি

11
এবং আপনি if কমান্ড দিয়ে বন্ধনী ব্যবহার করতে পারেন (উদাহরণস্বরূপ আমার উত্তর দেখুন)
gbjbaanb

1
আপনার "এক্সকপি / ওয়াই" ব্যবহার করা উচিত, যাতে ফাইলটি লক্ষ্য ডিরেক্টরিতে ওভাররাইট হয়ে যায়।
ম্যাথিয়াস

521

এফওয়াইআই, আপনাকে গোটো ব্যবহার করার দরকার নেই। শেল আইএফ কমান্ডটি বৃত্তাকার বন্ধনীগুলির সাথে ব্যবহার করা যেতে পারে:

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".
)

62
আমি আরও যোগ করতে পারি, খোলার প্রথম বন্ধনী সম্পর্কে সতর্ক হতে যাতে অবিলম্বে যদি বিবৃতিটি অনুসরণ করা প্রয়োজন তবে এটি পরবর্তী লাইনে একটি ত্রুটি কোড উত্পন্ন হবে
wonea

37
"$(ConfigurationName)"যদি আপনি ত্রুটির কোড 255
jgauffin

20
দ্রষ্টব্য, আপনি যদি around (কনফিগারেশননাম) "" এর আশেপাশে ব্যবহার করেন, আপনি ডিবাগ শব্দটির চারপাশে উদ্ধৃতিও প্রয়োজন - শেল কমান্ড যদি বিবৃতি হয় .. আক্ষরিক ... যখন স্ট্রিংয়ের সাথে তুলনা করা যায়।
gbjbaanb

5
দ্রষ্টব্য, 255 থেকে মুক্তি পাওয়ার জন্য, আমাকে প্রায় "" (কনফিগারেশননাম) ব্যবহার করতে হয়েছিল এবং শর্তের চারপাশে ফাঁকা স্থানগুলি সরিয়ে ফেলতে হয়েছিল, উদাহরণস্বরূপ যদি "$ (কনফিগারেশননাম)" == "মুক্তি" <- চারপাশে কোনও স্থান নেই ==
ফিল্টন

15
আমার ক্ষেত্রে ভিজ্যুয়াল স্টুডিও 2017 $(ConfigurationName)খালি (পোস্ট-বিল্ড ইভেন্ট কমান্ড লাইন)। if "$(Configuration)" == "Debug"আমার জন্য কাজ। বিটিডাব্লু, আপনি যদি অন্য সমস্ত কনফিগারেশনে কিছু করতে চান তবে ব্যবহার করুন if NOT "$(Configuration)" == "Debug"
রাল্ফ হুন্ডেওয়াদ্ট

125

আপনার পোস্ট বিল্ড ইভেন্টটি স্বাভাবিকের মতো যুক্ত করুন। তারপরে আপনার প্রকল্পটি সংরক্ষণ করুন, এটিকে নোটপ্যাডে খুলুন (বা আপনার প্রিয় সম্পাদক) এবং পোস্টবিল্ডএভেন্ট সম্পত্তি গোষ্ঠীতে শর্ত যুক্ত করুন। এখানে একটি উদাহরণ:

<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>

5
এটি কাজ করে তবে প্রকল্প ফাইল উত্সের ইভেন্টগুলির জন্য আপনার নকশা কাজের সমস্ত কাজটি আপনাকে বাধ্য করে। অন্যান্য শর্তযুক্ত বিল্ড ইভেন্টের ঘোষণাগুলি আইডিই থেকেও লুকানো থাকে are
জোসেফ ডাইগল

3
আমাকে বলতে হবে এটি আমার পক্ষে আরও ভাল উত্তর, পছন্দসই পদ্ধতিটি কার্যকর হয়নি।
মাইকেল এল

8
আপনার এটি নোটপ্যাডে খোলার দরকার নেই, আপনি ভিজ্যুয়াল স্টুডিওতে থাকতে পারেন। আপনি প্রকল্প-ফাইলটি ডান ক্লিক করতে পারেন, "আনলোড প্রকল্প" ক্লিক করুন, তারপরে আবার ডান ক্লিক করুন এবং "সম্পাদনা" এ ক্লিক করুন। আপনি এখন সিনট্যাক্স রঙ সহ {{csproj}} ফাইলটি সম্পাদনা করতে পারেন। আবার রাইটক্লিক করুন, তবে এখন পুনরায় লোড করতে "পুনঃলোড প্রকল্প" ক্লিক করুন।
হাবিল

1
আমি চেষ্টা করার পরে এই পদ্ধতির পোস্ট বিল্ডইভেন্ট কমান্ডে ম্যাক্রোগুলি প্রসারিত হয়নি। cd "$(ProjectDir)"প্রসারিত cd ""
ড্যারিল

3
ভিএস 2017 এ আপনি এটি দিয়ে এটিও করতে পারেন <Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="$(ConfigurationName) == Debug"> <Exec Command="your command"/></Target>। ম্যাক্রো ভেরিয়েবল এবং সবকিছু স্বাভাবিক হিসাবে কাজ করে।
এসসি

106

বিকল্পভাবে (যেহেতু ইভেন্টগুলি একটি ব্যাচ ফাইলে রাখা হয় এবং তারপরে ডাকা হয়), নিম্নলিখিতটি ব্যবহার করুন (ইভেন্টের বিল্ড বাক্সে, কোনও ব্যাচের ফাইলে নয়):

if $(ConfigurationName) == Debug goto :debug

:release
signtool.exe ....
xcopy ...

goto :exit

:debug
' Debug items in here

:exit

এই ভাবে আপনি কোন কনফিগারেশনের জন্য ঘটনা করতে পারেন, এবং এখনও বরং তাদের একটি ব্যাচ ফাইলে পাস থাকার চেয়ে ম্যাক্রো সঙ্গে এটি পরিচালনা, যে মনে %1হয় $(OutputPath), ইত্যাদি


6
আপনি যদি আপনার কিছু কোডকে প্রতিফলকটিতে দেখার সুযোগ পান, সংকলক অনেকগুলি সুইচ / কেস স্টেটমেন্টগুলিকে গোটোতে রূপান্তরিত করে।
স্টিংজি জ্যাক

10
বেশিরভাগ সমস্ত সংকলক কোডগুলি সরল নির্দেশে যেমন গোটো তে অনুবাদ করেন। এবং বিপরীত প্রকৌশল আপনি যে "জটিল" আরও জটিল নির্দেশাবলীর পরিবর্তে দেখতে পাবে তার পক্ষে সহজ নির্দেশাবলী একসাথে রাখতে পারে না। আমি দেখতে পাচ্ছি না মাইক্রোসফ্ট কীভাবে আমাদের গোটো ব্যবহার করতে বলছে, বা এটি এই পোস্টের সাথে কীভাবে প্রাসঙ্গিক।
তমুসজেরোয়েস

1
@ স্টেটিংজ্যাক: আপনি যদি সংকলিত কোডটি দেখেন তবে আপনি দেখতে পাবেন যে এটির সমস্তটি জেএমপি নির্দেশিকায় রূপান্তরিত হয়েছে :) যতক্ষণ আমি সুন্দরভাবে পঠনযোগ্য কোডটি লিখতে পারি ততক্ষণ কভারগুলির অন্তর্ভুক্ত সংকলকটি কী করে I (এটি নয় যে
গোটো

যদি আমি আমার পোস্ট-বিল্ড কমান্ডগুলি একটি ব্যাচের ভিতরে রাখি তবে বিল্ড টিপুন যখন আমি এই ত্রুটি বার্তাটি পাই:Error 1 The command "C:\MyProject\postbuild.bat" exited with code 99. MyProject
সেবাস্তিয়ান

4
আপনি যদি চান তবে আপনি অপসারণ করতে পারেন ifএবং ব্যবহার করতে পারেনgoto :$(ConfigurationName)
Calimero100582

15

ভিজ্যুয়াল স্টুডিও 2015: সঠিক বাক্য গঠনটি (এটি একটি লাইনে রাখুন):

if "$(ConfigurationName)"=="My Debug CFG" ( xcopy "$(TargetDir)test1.tmp" "$(TargetDir)test.xml" /y) else ( xcopy "$(TargetDir)test2.tmp" "$(TargetDir)test.xml" /y)

এখানে ত্রুটি নেই 255।


3
এটিকে এক লাইনে রাখুন
এরিক বোলে-ফেয়েসট

ভাল কাজ করছে। Tks
Vinicius Gonçalves

1
আপনার শর্তাধীন কৌশলটি আমার পক্ষে সবচেয়ে ভাল কাজ করেছে worked তবে এটি শর্ত ছাড়াই আরও বেশি ভাল কাজ করেছে এবং এটি আরও সংক্ষিপ্ত। "Project (প্রজেক্টডির) \ .. \ $ (কনফিগারেশননাম) \ মাইফাইনাম" "$ (টার্গেটডির)"
শান 1874

1
আপনার স্ক্রিপ্টটি সঠিক, তবে আমার স্ক্রিপ্টটি বিভিন্ন কনফিগারেশনের জন্য বিভিন্ন ফাইল অনুলিপি করতে দেয়।
এরিক বোলে-ফেয়েসট

8

ভিজ্যুয়াল স্টুডিও 2019 হিসাবে, আধুনিক .csprojফর্ম্যাটটি Targetউপাদানটিতে সরাসরি একটি শর্ত যুক্ত করে :

<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Debug'">
    <Exec Command="nswag run nswag.json" />
</Target>

ইউআই এটি সেট আপ করার কোনও উপায় সরবরাহ করে না, তবে Configurationআপনি যদি ইউআইয়ের মাধ্যমে পরিবর্তনগুলি করেন তবে এটি নিরাপদে স্থানটি নিরাপদে রেখে দেবে বলে মনে হয়।


এটি ভিএস 2019 এ আমার জন্য কাজ করেছে, আপনাকে ধন্যবাদ!
ব্র্যান্ডো দ্যাব্রেভ

এটি প্রকৃতপক্ষে উচ্চতর হওয়ার দাবিদার, এছাড়াও আপনাকে বিল্ড কনফিগারেশন চিহ্নিত করতে বা কমপক্ষে csproj বৈশিষ্ট্য থেকে শর্ত যুক্ত করতে ইউআই আপডেট করতে হবে।
ডেডলিচাম্বারস

4

আপনি কনফিগারেশন নামটি পোস্ট-বিল্ড স্ক্রিপ্টে পাস করতে পারেন এবং এটি চালানো উচিত কিনা তা দেখতে সেখানে এটি পরীক্ষা করে দেখতে পারেন।

এর সাথে কনফিগারেশন নামটি পাস করুন $(ConfigurationName)

এটি পরীক্ষা করা আপনি কীভাবে বিল্ড-পরবর্তী পদক্ষেপটি বাস্তবায়ন করছেন তার উপর ভিত্তি করে - এটি কমান্ড-লাইন আর্গুমেন্ট হবে।


-1

এটি ভিজ্যুয়াল স্টুডিও 2015-এ আমার জন্য কাজ করে।

আমি সমস্ত ডিএলএল ফাইলগুলি আমার সলিউশন ফোল্ডারের মতো একই স্তরের লাইব্রেরি ফোল্ডারে অবস্থিত একটি ফোল্ডার থেকে প্রকল্পটি তৈরির টার্গেট ডিরেক্টরিতে কপি করি copy

আমার প্রকল্প ডিরেক্টরি থেকে একটি আপেক্ষিক পথ ব্যবহার করে এবং ফোল্ডার কাঠামো উপরে .. \ .. \ lib সহ দুটি পদক্ষেপ

MySolutionFolder
.... MyProject
প্রচ্ছদ

if $(ConfigurationName) == Debug (
xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)"
) ELSE (echo "Not Debug mode, no file copy from lib")

-2

যে কোনও প্রকল্প সেটিংয়ের মতো, বিল্ডভেন্টগুলি কনফিগারেশন অনুযায়ী কনফিগার করা যায়। সম্পত্তি পৃষ্ঠা ডায়ালগের ড্রপডাউনটিতে আপনি যে কনফিগারেশনটি পরিবর্তন করতে চান তা কেবল নির্বাচন করুন এবং পোস্ট বিল্ড পদক্ষেপটি সম্পাদনা করুন।


10
আইডিই তৈরি করার সময় বিল্ড ইভেন্টগুলি কোনও কনফিগারেশনের সাথে সুনির্দিষ্ট নয়।
জোসেফ ডাইগল

1
VS2015 তেও কাজ করে না। কনফিগারেশন প্রতি কনফিগারযোগ্য নয়।
উইলেম

2
এটি কেবল ভিজ্যুয়াল স্টুডিওতে সি ++ প্রকল্পগুলিতে প্রযোজ্য, সি # নয়
বাইটকোড 77

-3

ভিজ্যুয়াল স্টুডিও ২০১২-এ আপনাকে ব্যবহার করতে হবে (আমি ভিজুয়াল স্টুডিও ২০১০-তেও ভাবি)

if $(Configuration) == Debug xcopy

$(ConfigurationName) ম্যাক্রো হিসাবে তালিকাভুক্ত ছিল, তবে এটি বরাদ্দ করা হয়নি।

এখানে চিত্র বিবরণ লিখুন

তুলনা করুন: বিল্ড কমান্ড এবং বৈশিষ্ট্যগুলির জন্য ম্যাক্রো


7
আপনি কনফিগারেশননম ব্যবহার করতে চান। এই চিত্রটি ... সমস্ত অস্পষ্টতার সাথে বুঝতে পারা সত্যিই শক্ত।
স্টিলথ রাব্বি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.