ভিজ্যুয়াল স্টুডিও পোস্ট বিল্ড ইভেন্ট - আপেক্ষিক ডিরেক্টরি অবস্থান থেকে অনুলিপি


228

একটি সফল বিল্ডে, আমি আউটপুট ডিরেক্টরিটির বিষয়বস্তু একই "বেস" ফোল্ডারের অধীনে ভিন্ন স্থানে অনুলিপি করতে চাই । এই মূল ফোল্ডারটি আপেক্ষিক অংশ এবং উত্স নিয়ন্ত্রণের সেটিংসের ভিত্তিতে পরিবর্তিত হতে পারে।

আমি আমার কাছে উপলব্ধ কয়েকটি ম্যাক্রো মান তালিকাভুক্ত করেছি ...

S (সমাধান সমাধান) = ডি: \ গ্লোবালডির \ সংস্করণ \ অ্যাপনাম \ সমাধান 1 \ বিল্ড

Project ( প্রজেক্টডির ) = ডি: \ গ্লোবালডির \ সংস্করণ \ অ্যাপনাম \ সমাধান ১ \ সংস্করণ \ প্রজেক্টএ \

আমি নিম্নলিখিত ফোল্ডারে আউটপুট দির সামগ্রীগুলি অনুলিপি করতে চাই:

ডি: \ গ্লোবালডির \ সংস্করণ \ অ্যাপনাম \ সমাধান 2 \ প্রকল্প \ নির্ভরতা

বেস অবস্থান "ডি: \ গ্লোবালডির \ সংস্করণ \ অ্যাপনাম" উপরের ম্যাক্রোগুলির মধ্যে একটি থেকে নেওয়া দরকার। তবে ম্যাক্রো মানগুলির কোনওটিই কেবল পিতামাতার অবস্থানের তালিকা করে না।

পোস্ট বিল্ড কপি কমান্ডের জন্য আমি কেবল বেস অবস্থানটি কীভাবে সরিয়ে ফেলব ?

উত্তর:


188

যদি টার্গেটডির বা অন্য কোনও ম্যাক্রো সঠিক স্থানে নির্দেশ না করে, ".." ডিরেক্টরিটি ফোল্ডার স্তরক্রমের পিছনে যেতে ব্যবহার করুন।

অর্থাত। $(SolutionDir)\..\..আপনার বেস ডিরেক্টরি পেতে ব্যবহার করুন ।


সমস্ত ম্যাক্রোর তালিকার জন্য, এখানে দেখুন:

http://msdn.microsoft.com/en-us/library/c02as0cs.aspx


ধন্যবাদ !! ভাল টিপ
Merlyn007

293

আপনি প্রকল্পের পোস্ট-বিল্ড ইভেন্ট ইভেন্ট কমান্ড লাইনে যা রাখতে চান তা এখানে:

copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll"

সম্পাদনা: বা আপনার টার্গেটের নাম যদি প্রকল্পের নামের চেয়ে আলাদা হয়।

copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib\$(TargetName).dll"

1
ভালো পরামর্শ. আমি উক্তি ভুলে গেছি।
ম্যাট মন্টাগ

3
এটি আমার পক্ষে কাজ করে নি কারণ আমি ভুলে গিয়েছি /Y। পুরো কমান্ডটি দেখানোর জন্য ধন্যবাদ।
চিহ্নিত করুন

10
xcopyউত্স ফোল্ডারের (বৃক্ষ) কাঠামো বজায় রাখার সময়, ওয়াইল্ডকার্ড এবং উপযুক্ত সুইচগুলির সাহায্যে অনুরূপ ফলাফল অর্জনের জন্য কেউ ব্যবহার করতে পারেন :xcopy /i /e /s /y /f "<source>\MyFolder\*" "<destination>\MyFolder"
Dr1Ku

4
আমি উত্স-অংশে $ (প্রকল্পের নাম) এর পরিবর্তে $ (টার্গেটনাম) ব্যবহার করার পরামর্শ দেব।
আলেকজান্ডার শ্মিড্ট

2
আমার পূর্বের আপডেট করুন। মন্তব্য: copy /Y "$(TargetPath)" "$(SolutionDir)somewhere\"অতিরিক্ত ব্যাকস্ল্যাশ ছাড়াই, যেহেতু S (সলিউশনডির) একটি পিছনে থাকা ব্যাকস্ল্যাশ অন্তত অন্তত: ভিএস ২০১২-তে অন্তর্ভুক্ত রয়েছে
বরফের

40

আপনি চেষ্টা করতে পারেন:

$(SolutionDir)..\..\

8
ভেরিয়েবল the (সলিউশনডির) এর মধ্যে ইতিমধ্যে পিছনে স্ল্যাশ রয়েছে তা দয়া করে মনে রাখবেন। উত্স: "সমাধানের ডিরেক্টরিতে (ড্রাইভ এবং পাথ দিয়ে সংজ্ঞায়িত); পিছনের ব্যাকস্ল্যাশ '\' অন্তর্ভুক্ত রয়েছে।" msdn.microsoft.com/en-us/library/42x5kfw4.aspx
স্নিকার

10

আমি মনে করি এটি সম্পর্কিত, কিন্তু msbuildভিএস এর মধ্যে থেকে কমান্ড লাইন (একটি ব্যাচ ফাইল থেকে) বনাম বিল্ডিং ব্যবহার করে সরাসরি সমস্যা তৈরি হয়েছিল I

নিম্নলিখিত মত কিছু ব্যবহার:

<PostBuildEvent>
  MOVE /Y "$(TargetDir)something.file1" "$(ProjectDir)something.file1"
  start XCOPY /Y /R "$(SolutionDir)SomeConsoleApp\bin\$(ConfigurationName)\*" "$(ProjectDir)App_Data\Consoles\SomeConsoleApp\"
</PostBuildEvent>

(দ্রষ্টব্য: অনুলিপি প্রতিরোধকারী অনুমতি সংক্রান্ত ইস্যুটি পেতে ব্যবহার করার start XCOPYপরিবর্তে XCOPY)

একটি ব্যাচফাইল থেকে মিসবিল্ড কার্যকর $(SolutionDir)করার ..\সময় ম্যাক্রোর মূল্যায়ন করা হয়েছিল, যার ফলে XCOPYকমান্ডটি ব্যর্থ হয়েছিল। এটি অন্যথায় ভিজ্যুয়াল স্টুডিওর মধ্য থেকে নির্মিত হয়ে কাজ করে। /verbosity:diagnosticমূল্যায়িত আউটপুট দেখতে ব্যবহার করে নিশ্চিত হয়েছি ।

$(ProjectDir)..\পরিবর্তে ম্যাক্রো ব্যবহার করা, যা একই জিনিসটির সমান, ঠিকঠাক কাজ করেছে এবং উভয় বিল্ডের দৃশ্যে পুরো পথ ধরে রেখেছে।


1
আমি ক্রেডিট দিতে ভুলে গেলে একই হ্যাকের সাথে ক্রস লিঙ্কিং ...
drzaus

Startআমার জন্য কাজ করেছেন ( xcopyএকটি ভাগ করা ফোল্ডারে)।
এজেন্টফায়ার

4

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

ভিজ্যুয়াল স্টুডিওতে এটি চালু করতে, সরঞ্জাম / বিকল্পগুলিতে যান তারপরে প্রজেক্টস এবং সলিউশন নামক বিভাগে গাছের ভিউটি স্ক্রোল করুন, এটি প্রসারিত করুন এবং বিল্ড এবং রান ক্লিক করুন, ডানদিকে তাদের একটি ড্রপ ডাউন যা বিল্ড আউটপুট ভার্বোসিটি নির্দিষ্ট করে , ডায়াগোনস্টিক এ সেটিংস স্থাপন করা আপনাকে অন্যান্য ম্যাক্রো মানগুলি ব্যবহার করতে পারে তা আপনাকে দেখায়।

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

আশা করি এটি রিহানকে সহায়তা করবে


thx রিহান, তবে দৃশ্যত VS 2003 এটি সমর্থন করে বলে মনে হচ্ছে না! পোস্ট বিল্ড ইভেন্টের সাথে অবশ্যই আমি বেশ সন্তুষ্ট ;-)
শুভেচ্ছা 15

আমি বুঝতে পারি নি এটি vs2003, এবং অতএব কোনও সম্ভাব্য সমাধান হিসাবে মিসবিল্ড ব্যবহার করা যদি আমি মনে করি vs2003 মিসবিল্ড যুগের পূর্ববর্তী ছিল? উত্তরের জন্য ধন্যবাদ. VS 2003 এর সাথে শুভকামনা, আমি VS2005 এ যাওয়ার পরে আর ফিরে তাকাতে পারি নি
রিহান মেইজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.