前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >msbuild 修改 VisualStudio 文件复制到输出目录的路径

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

作者头像
林德熙
发布2020-02-17 14:44:09
3.4K1
发布2020-02-17 14:44:09
举报
文章被收录于专栏:林德熙的博客林德熙的博客

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

文件夹到文件夹

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

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

代码语言:javascript
复制
    <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 文件复制到输出文件夹

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

用 Link 修改路径

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

代码语言:javascript
复制
    <ItemGroup>
      <None Update="Dll\*.dll" Link="%(Filename)%(Extension)">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </None>
    </ItemGroup>

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

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

代码语言:javascript
复制
    <ItemGroup>
      <None Update="Dll\*.dll" Link="%(Filename)%(Extension)" Visible="false">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </None>
    </ItemGroup>

通过 ContentWithTargetPath 项

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

代码语言:javascript
复制
    <ItemGroup>
        <ContentWithTargetPath Include="Dll\*.dll">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
            <TargetPath>%(Filename)%(Extension)</TargetPath>
        </ContentWithTargetPath>
    </ItemGroup>

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

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

代码语言:javascript
复制
    <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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文件夹到文件夹
  • 用 Link 修改路径
  • 通过 ContentWithTargetPath 项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档