首页 > 解决方案 > VS2019 .csproj 删除或修改链接内容文件

问题描述

我有一个外部项目,其中包含要在多个 Web 项目之间共享的大量“通用”javascript/etc 内容文件。使用我的 csproj 文件中的新LinkBase属性,以及此处的技巧组合:http://mattperdeck.com/post/Copying-linked-content-files-at-each-build-using-MSBuild.aspx现在有了链接项目的确切层次结构复制到主项目,当我运行我的网站时,发现内容文件功能,并且捆绑甚至发生正确,这太棒了!

问题是,在关闭应用程序后,复制的内容文件仍然存在,并且由于它是一个团队项目,它可能会让其他开发人员感到困惑,哪些文件是“主”副本,哪些是复制的,没有视觉指示符.

有没有办法我可以做以下两个之一?

A:在复制任务期间,在所有文件前面加上一些注释文本,表示“这是从链接项目复制的,不要编辑此文件,所有更改都将丢失,请在此处编辑文件 ->”

或者:

B: 项目关闭后有什么方法可以删除文件吗?我没有看到项目完成后发生的任何构建事件,所以我猜这个选项可能是不可能的。

这是我目前拥有的,非常简单:

<ItemGroup>
  <Content Include="..\MyFileLinks\**\*.js" LinkBase="" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

<Target Name="CopyLinkedContentFiles" BeforeTargets="Build">
  <Copy SourceFiles="%(Content.Identity)"
        DestinationFiles="%(Content.Link)"
        SkipUnchangedFiles='true'
        OverwriteReadOnlyFiles='true'
        Condition="'%(Content.Link)' != ''" />
</Target>

标签: visual-studiomsbuildvisual-studio-2019csproj

解决方案


最好的方法是添加一个依赖于Clean进程的删除目标。实际上,没有依赖的目标,close vs因为任何目标都依赖于构建过程,而不是关闭 VS 或打开 VS。

所以我的建议是添加一个依赖于干净进程的目标来删除这些文件。

添加这个目标:

<Target Name="RemoveFiles" AfterTargets="Clean">
        <Message Importance="high" Text="%(Content.Link)"></Message>
        <Delete Files="%(Content.Link)"></Delete>
</Target>

关闭 VS前,请点击Clean,此时文件将被删除。


推荐阅读