Visual Studio C# 项目生成时复制项目资源目录到生成目录

关键词:C#, C#项目, csproj, Visual Studio, VS, MSBuild, output, debug, 项目生成, 复制
关联搜索标题:
C# Visual Studio 项目生成时复制项目资源文件到生成目录
Visual Studio:如何“复制到输出目录”而不复制文件夹结构?
Visual Studio 如何复制项目里的某个文件夹(及其子目录和文件)到输出文件夹?

博主我作为一个过来人,有必要给光速入门的新手指明学习方向

微软官网 MSBuild 开发文档: https://docs.microsoft.com/zh-cn/visualstudio/msbuild/msbuild

其实完全可以避免使用预处理宏(什么 copy, xcopy 这些傻快直 的命令),直接修改 csproj 文件达成目的。
以下操作,都是在项目根目录下的 csproj 文件里折腾。

直接拷贝某个目录下的所有文件(递归,包括子目录,但不包含目录结构)到输出目录

<Target Name="CopyMyFolder" BeforeTargets="PrepareForBuild">
    <ItemGroup>
      <SomeFolder Include="MyFolder\**">SomeFolder>
    ItemGroup>
    <Copy SourceFiles="@(SomeFolder)" DestinationFolder="$(OutputPath)" SkipUnchangedFiles="True">Copy>
 Target>

直接拷贝整个目录(递归,包括它自己、它的所有子目录及其文件,包含目录结构)到输出目录

<ItemGroup>
  <None Include="MyFolder\**">
    <CopyToOutputDirectory>PreserveNewestCopyToOutputDirectory>
  None>
ItemGroup>

直接拷贝某个目录下的所有子对象(递归,不包括自己,只包括它的所有子目录及其文件,包含目录结构)到输出目录

<Target Name="CopyMyFolder" BeforeTargets="PrepareForBuild">
  <ItemGroup>
    <SomeFolder Include="MyFolder\**" />
  ItemGroup>
  <Copy SourceFiles="@(SomeFolder)" 
        DestinationFiles="$(OutputPath)\%(RecursiveDir)%(Filename)%(Extension)" 
        SkipUnchangedFiles="True">
  Copy>
Target>
  • 有网友可能会问:
  1. 搞这么多,有什么用?
  2. copy/xcpoy 命令简单粗暴,它不香吗?
  • 但你在开发中是否会遇到:
  1. C/C++编译出来的DLL库,尽管在Visual Studio里引用了,可是编译输出的文件夹里却没有!
  2. 正在开发的项目是基于某个SDK开发的,和第三方软件做对接。但是每次手动Copy最新生成的二进制文件到第三方软件根目录下才能测试,就很烦。
  3. 通过预处理的宏,简单粗暴的 copy/xcopy 命令,每次编译生成都要完整走一遍完整复制(有重的直接覆盖)。机械硬盘用户表示很伤:复制太慢了。固态硬盘用户表示也很伤:又增加了没有必要的写入,消耗了本来就可以节省的硬盘寿命!

通过学习本篇博客,你将可以彻底解决 从 项目文件直接复制到 编译输出的文件夹 不能全自动的问题!同时可以抛弃不能智能跳过相同文件的 copy/xcopy 命令!

你可能感兴趣的:(笔记,c#,visual,studio,经验分享)