关键词: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>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
直接拷贝某个目录下的所有子对象(递归,不包括自己,只包括它的所有子目录及其文件,包含目录结构)到输出目录
<Target Name="CopyMyFolder" BeforeTargets="PrepareForBuild">
<ItemGroup>
<SomeFolder Include="MyFolder\**" />
</ItemGroup>
<Copy SourceFiles="@(SomeFolder)"
DestinationFiles="$(OutputPath)\%(RecursiveDir)%(Filename)%(Extension)"
SkipUnchangedFiles="True">
</Copy>
</Target>
- 有网友可能会问:
- 搞这么多,有什么用?
- copy/xcpoy 命令简单粗暴,它不香吗?
- 但你在开发中是否会遇到:
- C/C++编译出来的DLL库,尽管在Visual Studio里引用了,可是编译输出的文件夹里却没有!
- 正在开发的项目是基于某个SDK开发的,和第三方软件做对接。但是每次手动Copy最新生成的二进制文件到第三方软件根目录下才能测试,就很烦。
- 通过预处理的宏,简单粗暴的 copy/xcopy 命令,每次编译生成都要完整走一遍完整复制(有重的直接覆盖)。机械硬盘用户表示很伤:复制太慢了。固态硬盘用户表示也很伤:又增加了没有必要的写入,消耗了本来就可以节省的硬盘寿命!
通过学习本篇博客,你将可以彻底解决 从 项目文件直接复制到 编译输出的文件夹 不能全自动的问题!同时可以抛弃不能智能跳过相同文件的 copy/xcopy 命令!