সংকলনের সময় অ্যাপ্লিকেশন ফোল্ডারে ফাইলগুলি অনুলিপি করা হচ্ছে


96

আমার কিছু ফাইল যদি আমার প্রজেক্ট থেকে .\bin\debug\সংকলনের ফোল্ডারে অনুলিপি করতে চান তবে মনে হয় আমাকে সেগুলি প্রকল্পের মূলের মধ্যে রেখে দিতে হবে। এগুলিকে একটি সাবফোল্ডারে রাখলে মনে হয় সেগুলি .\bin\debug\একই কাঠামোর মধ্যে ফোল্ডারে কপি করা আছে।

এটি এড়ানোর কোনও উপায় আছে কি?

শুধু থেকে পরিষ্কার হতে: যদি আমি একটি আছে MyFirstConfigFile.txtএবং MySecondConfigFile.txtএকটি ConfigFilesফোল্ডার এবং আমি তাদের সেট আউটপুট অনুলিপি করা অনুলিপি করুন ... তারপর, তারা প্রদর্শিত .\bin\debug\ConfigFiles\ফোল্ডার। আমি তাদের .\bin\debug\ফোল্ডারে প্রদর্শিত হতে চান ।

উত্তর:


94

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

এখানে ম্যাক্রো বিল্ডের একটি পোস্ট রয়েছে যা আমি মনে করি যে রুট বিল্ড ফোল্ডারে কনফিগারেশন নামে একটি ডিরেক্টরিতে সমস্ত ফাইল অনুলিপি করে কাজ করবে:

copy $(ProjectDir)Configuration\* $(ProjectDir)$(OutDir)

4
গন্তব্যের জন্য, এটি $ (প্রজেক্টডির) \% (আউটডির) হওয়া উচিত নয়?
এড গ্রায়েস

11
সঠিক এবং পরীক্ষিত (Vs2010) ম্যাক্রোটি হ'ল: অনুলিপি "$ (প্রজেক্টডির) ফায়ারবার্ড \ ফায়ারবার্ড_বিন *" "$ (প্রজেক্টডির) $ (আউটডির)"
এরিক বোলে-ফেয়েসট

আউটপুট জন্য আপনি কেবল একটি আপেক্ষিক ফাইলও করতে পারেন: "Project (প্রজেক্টডির) ফায়ারবার্ড \ ফায়ারবার্ড_বিন *" "$ (আউটডির)"
এলেন্ডুরউইন

4
আমি মনে করি যে উদ্ধৃতিগুলির ব্যবহার প্রয়োজনীয়:copy "$(ProjectDir)subfolder_name\"* "$(ProjectDir)$(OutDir)"
টেডবাস

4
এমএসভিএস ২০১7 (15.4) এ এটি ঠিক হওয়া উচিত $(OutDir)(অর্থাত্ ছাড়া $(ProjectDir)) মনে হয় ... অন্যথায় আপনি দ্বিগুণ পথের ত্রুটি পান
জেএইচবিোনারিয়াস

51

আপনি আপনার সিএসপিজে এমএসবিল্ড টাস্কটি ব্যবহার করতে পারেন।

আপনার সিএসপোজ ফাইলটি সম্পাদনা করুন

  <Target Name="AfterBuild">
    <Copy SourceFiles="$(OutputPath)yourfiles" DestinationFolder="$(YourVariable)" ContinueOnError="true" />
  </Target>

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

38

আপনি সমাধান এক্সপ্লোরারের মূলের মধ্যে ফাইল বা লিঙ্কগুলি রেখে দিতে পারেন এবং তারপরে ফাইলগুলির বৈশিষ্ট্যগুলি সেট করতে পারেন:

Build action = Content

এবং

Copy to Output Directory = Copy if newer (উদাহরণ স্বরূপ)

একটি লিঙ্কের জন্য উইন্ডোজ এক্সপ্লোরার থেকে ফাইলটিকে শিফট এবং নিয়ন্ত্রণ কীগুলি ধরে রেখে সমাধানের অন্বেষণকারীটিতে টানুন।

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


4
এটি আসল আপেক্ষিক পথটি সংরক্ষণ করবে, যা ওপি

যদি আপনি ফাইলটিকে আপনার প্রকল্পের শীর্ষ স্তরের নোডে রাখেন তবে এটি সরাসরি আউটপুট ফোল্ডারে ied (আউটপুটপথ) অনুলিপি করা হবে।
জর্জি

4
গ্রহণযোগ্য বিকল্পের জন্য এই পোস্টটি দেখুন
জোয়ে হিউল

5

ব্যক্তিগতভাবে আমি এইভাবে পছন্দ করি।

.csprojযোগ করতে পরিবর্তন করুন

<ItemGroup>
    <ContentWithTargetPath Include="ConfigFiles\MyFirstConfigFile.txt">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <TargetPath>%(Filename)%(Extension)</TargetPath>
    </ContentWithTargetPath>
</ItemGroup>

4
আমার মতে কোনও পোস্ট-বিল্ড ইভেন্ট ইভেন্টের চেয়ে ভাল। ধন্যবাদ!
khlr

এটি কি ঠিক একই প্রকল্পটি ডান-ক্লিক করা এবং সমাধান এক্সপ্লোরার থেকে "বিদ্যমান আইটেম যোগ করুন" নির্বাচন করার পরে ফাইল বৈশিষ্ট্যটিকে "আউটপুট ডিরেক্টরিতে অনুলিপি করুন" "আরও নতুন করে অনুলিপি করুন" এ সেট করুন। সরাসরি এক্সএমএল সংশোধন করার দরকার নেই।
অ্যান্টনি বুথ

4
@ অ্যান্টনিবুথ কিছুক্ষণ পরে আপনি বুঝতে পারবেন যে কী চলছে তা বোঝা এবং আপনার আইডির সাহায্যে একই জিনিসটি কীভাবে করা যায় তা শেখার পরিবর্তে কোডটি সরাসরি সংশোধন করা সহজ। আজ আপনি ভিজ্যুয়াল স্টুডিও ব্যবহার করছেন, আগামীকাল এটি জেটব্রেইনস রাইডার এবং পরের দিন ভিএস কোড হতে পারে। শেষে, আপনি সর্বদা আইডিইয়ের চেয়ে কোনও ভাষা আয়ত্ত করা ভাল। পিএস: আমি জানি না আপনি যা বর্ণনা করেছেন তা একই কিনা তবে আমি কেবল এক্সএমএল এ কীভাবে এটি করতে পারি তা জানি, এর চেয়ে আরও ভাল।
Jér Mme MEVEL

অতিরিক্তভাবে, বর্তমানে IDE এর মধ্যে লক্ষ্য পথ নির্ধারণের কোনও উপায় নেই, সুতরাং আপাতত আমাদের এক্সএমএল সম্পাদনা করতে হবে।
জোয়ে হিউল

3

সাবফোল্ডার থেকে সাবফোল্ডারে অনুলিপি করুন

 if not exist "$(ProjectDir)$(OutDir)subfolder" mkdir "$(ProjectDir)$(OutDir)subfolder"

 copy "$(ProjectDir)subfolder\"  "$(ProjectDir)$(OutDir)subfolder\"

7
স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম এবং অবদান রাখার জন্য ধন্যবাদ। আপনি ইতিমধ্যে একটি অতি পুরানো প্রশ্নের উত্তর দিয়েছেন যার মধ্যে ইতিমধ্যে অতি উচ্চারণের উত্তরগুলির একটি গুচ্ছ রয়েছে। আপনি যদি মনে করেন যে বিদ্যমান উত্তরগুলি ছাড়াও আপনার উত্তরটি দরকারী বলে মনে হয় তবে আপনার উত্তরটি কেন সমস্যার সমাধান করে এবং কেন এটি অন্যের থেকে ভাল / পৃথক for
ম্যাথিজ ওয়েসেলস

1

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


0

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


0

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

ভিজ্যুয়াল স্টুডিওতে ফাইলটিতে ডান ক্লিক করুন, বৈশিষ্ট্যগুলি নির্বাচন করুন, তারপরে বিকল্পটি 'অনুলিপি'তে' সর্বদা 'পরিবর্তন করুন। Http://msdn.mic Microsoft.com/en-us/library/0c6xyb66.aspx দেখুন


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