专栏首页林德熙的博客msbuild 修改 VisualStudio 文件复制到输出目录的路径

msbuild 修改 VisualStudio 文件复制到输出目录的路径

在默认的 VisualStudio 可以右击任意的文件,让这个文件在编译时复制到输出目录,但是这个选项将会在复制到输出目录时带上这个文件所在 VisualStudio 的文件夹结构。本文告诉大家几个方法让 VisualStudio 的文件可以在编译时输出到自定义的任意路径

文件夹到文件夹

将整个文件夹内容输出到自定义文件夹可以使用写一个 Target 的方法

如我需要将 VisualStudio 的 dll 文件夹的内容全部输出到输出目录,而不是输出到 输出目录下的 Dll 文件夹,可以使用下面代码

    <Target Name="CopyReferenceDll" AfterTargets="Build">
        <ItemGroup>
            <ReferenceDll Include="Dll\*.dll">
            </ReferenceDll>
        </ItemGroup>
        <Copy SourceFiles="@(ReferenceDll)" DestinationFolder="$(OutputPath)" SkipUnchangedFiles="True"></Copy>
    </Target>

将上面代码复制到 csproj 文件里面,放在 </Project> 之前就可以做到将 VisualStudio 里面的 Dll 文件夹的 dll 文件复制到输出文件夹

至于需要输出其他文件到其他文件夹的,看上面的代码修改就可以了,如果不知道如何修改请联系我

通过修改文件链接的地址,这个方法只能输出到输出文件夹内某个文件夹下

    <ItemGroup>
      <None Update="Dll\*.dll" Link="%(Filename)%(Extension)">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </None>
    </ItemGroup>

此时的 Dll 文件夹的 dll 文件,将会重新链接到 *.dll 路径而不是 Dll\*.dll 但是此时会在 VisualStudio 看到项目的根文件夹存在很多 dll 文件

如果不想看到这些文件通过 Visible 属性

    <ItemGroup>
      <None Update="Dll\*.dll" Link="%(Filename)%(Extension)" Visible="false">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </None>
    </ItemGroup>

通过 ContentWithTargetPath 项

将原本的 None 替换为 ContentWithTargetPath 项,这个项提供 TargetPath 属性,设置输出的文件

    <ItemGroup>
        <ContentWithTargetPath Include="Dll\*.dll">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
            <TargetPath>%(Filename)%(Extension)</TargetPath>
        </ContentWithTargetPath>
    </ItemGroup>

这个方法底层也是调用了 Copy 命令

适合文件到文件的方式,将 %(Filename)%(Extension) 替换为具体文件,如将某个文件复制到指定的路径,这样写清真很多,请看代码

    <ItemGroup>
        <ContentWithTargetPath Include="Dll\lindexi.dll">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
            <TargetPath>lindexi.dll</TargetPath>
        </ContentWithTargetPath>
    </ItemGroup>

本文用到了 %(Filename) 以及 CopyTarget 等,这些可以在我博客看到如何使用

Roslyn 如何使用 MSBuild Copy 复制文件

c# - Visual Studio: How to “Copy to Output Directory” without copying the folder structure? - Stack Overflow

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • win10 uwp 打开文件管理器选择文件

    本文:让文件管理器选择文件,不是从文件管理器获得文件。 假如已经获得一些文件,那么如何从文件管理器选择这些文件? 使用方法很简单。

    林德熙
  • C#判断文件属于文本或二进制

    其实标题说错了,所有的文件储存都是二进制,但我们想区别的是那些可以当做文本来读的,如 .txt,.cs,.c 的文件和一般的不是文字的文件。 我们有什么办法可区...

    林德熙
  • cmd 如何跨驱动器移动文件夹

    如果在命令行或 cmd 批处理文件通过 move 移动文件夹的时候,移动的文件夹是跨驱动器的,那么将会显示拒绝访问

    林德熙
  • Cannot change version of project facet Dynamic Web Module to 3.0

      最近在开发项目时,老是报错说:Project is not Dynamic Web Module 3.0.右击项目选择属性进行修改时出现以下错误:

    阿豪聊干货
  • rsync快速删除大量小文件

    有时候一个文件中有几十万个甚至更多子文件的情况下,就算这个文件不大,可能只有几G的情况下,用rm -rf 仍然很慢,需要等很久,而且占用大量的系统资源。一个比较...

    生信编程日常
  • Vim 主题:space-vim-theme -- 支持 dark 和 light 两种背景

    自从接触过 spacemacs 以后,就非常喜欢它的主题:spacemacs-theme,后来照葫芦画瓢移植了一个深色背景下的 space-vim-dark。

    用户1558438
  • 经典故障分析 -用好UTL_FILE包其实并不是太容易

    作者介绍 ? 崔华 网名 dbsnake Oracle ACE Director,ACOUG 核心专家 UTL_FILE包可以用来读写操作系统上的文本文件...

    数据和云
  • 数据库高可用和分区解决方案-MySQL 篇

    许春植(Luocs) (阿里巴巴高级数据库管理员,7年以上数据库运维管理经验,擅长MySQL、Oracle及MongoDB数据库,目前主要研究并建设Mongo...

    数据和云
  • Python的变量

    ZONGLYN
  • 文件句柄与文件描述符

    1.概述 在实际工作中会经常遇到一些bug,有些就需要用到文件句柄,文件描述符等概念,比如报错: too many open files, 如果你对相关知识一无...

    用户1263954

扫码关注云+社区

领取腾讯云代金券