সিএসপ্রোজ ডটনেটকোর ব্যবহার করে আউটপুট ডিরেক্টরিতে ফাইলগুলি অনুলিপি করুন


104

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

উত্তর:


144

আপনার প্রয়োজনগুলি নির্ভর করে আপনার লক্ষ্যগুলি অর্জনের বেশ কয়েকটি উপায় রয়েছে।

সবচেয়ে সহজ পদ্ধতির মধ্যে মেটাডেটা ( CopyToOutputDirectory/ CopyToPublishDirectory) আইটেমগুলি শর্তযুক্তভাবে সেট করা ( এটি পরিবর্তে আইটেম .txtহিসাবে ধরে নেওয়া , যদি এটি কাজ না করে তবে পরিবর্তে চেষ্টা করুন):NoneContent<Content>

<ItemGroup Condition="'$(Configuration)' == 'Debug'">
  <None Update="foo.txt" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

যদি আরও নিয়ন্ত্রণের প্রয়োজন হয় তবে সর্বাধিক বহুমুখী পদ্ধতির মধ্যে কাস্টম টার্গেট যুক্ত করা যা সিএসপোজ ফাইলটিতে বিল্ড প্রক্রিয়াটিতে হুক হয়:

<Target Name="CopyCustomContent" AfterTargets="AfterBuild">
  <Copy SourceFiles="foo.txt" DestinationFolder="$(OutDir)" />
</Target>
<Target Name="CopyCustomContentOnPublish" AfterTargets="Publish">
  <Copy SourceFiles="foo.txt" DestinationFolder="$(PublishDir)" />
</Target>

এটি সম্পর্কিত ডিরেক্টরিতে একটি ফাইল অনুলিপি করে। <Copy>কাজের জন্য আরও বিকল্পের জন্য এর ডকুমেন্টেশন দেখুন । এটি নির্দিষ্ট কনফিগারেশনে সীমাবদ্ধ করতে আপনি একটি Conditionবৈশিষ্ট্য ব্যবহার করতে পারেন :

<Target … Condition=" '$(Configuration)' == 'Release' ">

এই Conditionবৈশিষ্ট্যটি <Target>উপাদান বা টাস্ক উপাদানগুলির মতো উভয় ক্ষেত্রে প্রয়োগ করা যেতে পারে <Copy>


আমি << রেফারেন্স> আইটেমগুলিতে কীভাবে 'গন্তব্য ফোল্ডার' প্রয়োগ করব, বা এটি ইভেন্টটি সম্ভব, আমি যে দস্তাবেজগুলি খুঁজে পেতে পারি তার মধ্যে খুব বেশি কিছু নেই। আমি আমার সমস্ত সমাবেশগুলি মূল স্তরে চাই না এবং সেগুলি তাদের নিজস্ব ফোল্ডারে থাকতে পছন্দ করব।
রিহেরিক

আপনি আইটেমগুলিতে সরাসরি DestinationSubDirectory="subdir\"মেটাডেটা সেট করতে পারেন Reference। তবে এর অর্থ আপনার
নিজেরাই

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

93

যদিও এটি আমার সমস্যাটি বাছাই করতে সহায়তা করেছে, এটি একটি উপ-ডিরেক্টরিতে সমস্ত ফাইলের জন্য কাজ করে না। আমি Content Includeবরং ব্যবহার করেছি Content Update;

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="layouts\*.*">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>  
  </ItemGroup>

</Project>

4
অন্যান্য সমস্ত উত্তর / পরামর্শগুলির প্রতিটি ক্রিয়াকলাপ আমার পক্ষে কাজ করতে ব্যর্থ হয়েছিল। এমনকি ভার্বোস বিল্ড আউটপুটটিতে ফাইলের উল্লেখ নেই। তবে আপনার পরামর্শ এখানে কাজ করেছে।
ব্যবহারকারী 7817808

15
এবং আপনি যদি অন্তর্বর্তী সাবফোল্ডার ব্যবহার অন্তর্ভুক্ত করতে চান<Content Include="layouts\**\*.*">
JSancho

4
ওয়েব এসডিকে ( <Project Sdk="Microsoft.NET.Sdk.Web">) ব্যবহার করার সময় এটি আপনাকে ব্যবহার করতে দেয় না Include=কারণ এটি ইতিমধ্যে স্পষ্টতই এসডিকে-র মধ্যে নির্দিষ্ট করে বলে মনে হচ্ছে। Update=আমার অতিরিক্ত ফাইলগুলি তৈরি এবং অন্তর্ভুক্ত করার জন্য আমাকে এটি পেতে ব্যবহার করতে হয়েছিল।
27

ভাল লাগল, ধন্যবাদ .. তবে কীভাবে কেবল ফোল্ডারের সামগ্রীটি আউটপুট ডিরেক্টরিতে অনুলিপি করা যায় তা ফোল্ডারে নয়। অভিব্যক্তি assets\*.*এটি অনুমান করা উচিত। তবে এটি সম্পূর্ণ সম্পদ ফোল্ডারটি অনুলিপি করে। সুতরাং আমার কাছে আছে bin/Debug/netcoreapp3.1/assets/...তবে আমি আউটপুটটির মূল ডিরেক্টরিতে সম্পদ ফোল্ডারের ফাইলগুলি চাই। bin/Debug/netcoreapp3.1/...
ডোমিনিক

আমি একটি সমাধান পেয়েছি: xml <Project Sdk="Microsoft.NET.Sdk"> <ItemGroup> <AssetsSourceFiles Include="assets/**/*.*"/> </ItemGroup> <Target Name="CopyCustomContent" AfterTargets="AfterBuild"> <Copy SourceFiles="@(AssetsSourceFiles)" DestinationFolder="$(OutDir)" SkipUnchangedFiles="true" /> </Target> </Project> (আরও ভাল কোড ফর্ম্যাটের জন্য আমার উত্তর দেখুন))
ডোমিনিক

15

এটি আপনার .csproj ফাইলের মধ্যে nlog.config কে কাঙ্ক্ষিত ফাইলপথের সাথে প্রতিস্থাপন করুন। তারপরে এটি সংরক্ষণ করুন এবং আপনার প্রকল্পটি তৈরি করুন:

<ItemGroup>
  <Content Update="Nlog.config">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </Content>
</ItemGroup>

এটি উপ-ডিরেক্টরিগুলি অনুলিপি করে না doesn't
নাল

13

ধরে নিচ্ছি assetsআপনার মূল ডিরেক্টরিতে একটি ফোল্ডার রয়েছে। আপনি যেমন চান নাম রাখতে পারেন। এইটা শুধুমাত্র একটা উদাহরণ:

আপনার-প্রকল্প

<Project Sdk="Microsoft.NET.Sdk">
  <ItemGroup>
    <AssetsSourceFiles Include="assets/**/*.*"/>
  </ItemGroup>

  <Target Name="CopyCustomContent" AfterTargets="AfterBuild">
    <Copy SourceFiles="@(AssetsSourceFiles)" DestinationFolder="$(OutDir)" SkipUnchangedFiles="true" />
  </Target>
</Project>

এটি assetsফোল্ডারে মোড়ানো না হয়ে কেবল assetsফোল্ডারের সামগ্রীটি আউটপুট রুটে অনুলিপি করে । তবে আপনি যদি নিজেই ফোল্ডারটি দিয়ে অনুলিপি করতে চান তবে আপনি নীচের কোডটি ব্যবহার করতে পারেন:

<Project Sdk="Microsoft.NET.Sdk">
  <ItemGroup>
    <Content Include="assets\**\*.*">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
</Project>

3

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

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Content Update="wwwroot\html-templates\**\*.*">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

</Project>

0

ধন্যবাদ আপনি আমার দিনটি বাঁচান, যদি আপনাকে কোনও নির্দিষ্ট ন্যুগেট প্যাকেজটির একটি এস্প নেট কোর প্রকল্পে (2.2) জোর করা দরকার হয় তবে আপনার সিএসপিজেজের শেষে যুক্ত করুন:

<!-- Force copy MathNet because we need it in compilation -->
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="Build">
    <PropertyGroup>
        <ErrorText>This project references NuGet package(s) that are missing on this computer. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\packages\MathNet.Numerics.4.8.1\lib\netstandard2.0\MathNet.Numerics.dll')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MathNet.Numerics.4.8.1\lib\netstandard2.0\MathNet.Numerics.dll'))" />
</Target>

<ItemGroup>
    <ContentWithTargetPath Include="..\packages\MathNet.Numerics.4.8.1\lib\netstandard2.0\MathNet.Numerics.dll">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
       <TargetPath>MathNet.Numerics.dll</TargetPath>
    </ContentWithTargetPath>
</ItemGroup>

0
<PropertyGroup>
    <PostBuildEvent>xcopy "$(ProjectDir)Xml" "$(ProjectDir)$(OutDir)Xml" /S /F /I /R /Y</PostBuildEvent>
</PropertyGroup>

বা

<PropertyGroup>
    <PostBuildEvent>copy /Y "$(ProjectDir)MyXml.xml" "$(ProjectDir)$(OutDir)Xml"</PostBuildEvent>
</PropertyGroup>

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