如何将内容链接文件复制到项目目录而不会导致重复

How to copy Content linked files to project directory without causing duplicates

我试图在我的项目中引用一些来自 nuget 包的 javascript 文件。所以我将这些文件添加为内容 Link 参考。

<Content Include="$(NuGetPath_jQuery)\Content\Scripts\**\*.*">
  <Link>Scripts\%(RecursiveDir)%(FileName)%(Extension)</Link>
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>

但是我可以 F5 调试 Web 项目,我需要这些文件成为项目文件夹结构的一部分。我还在 ScriptBundle 中使用这些文件,因此需要存在物理目录结构以进行本地调试。结果,我最终添加了以下构建 ttask,它根据 Matt Perdeck's blog 复制内容 linked 文件,这在许多其他围绕内容 linking 的线程中被引用,如下所示.

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

现在 VS 很开心,同时 F5 调试。但是在下次加载项目时抱怨无法添加内容 links 因为文件已经存在。哪些是在以前的版本中复制的。我是否缺少一些秘诀来告诉 VS 忽略这些警告?我注意到 msbuild 不会抛出任何此类警告。只有VS在抱怨。我看到如下警告:

警告无法将文件 'C:\Users\pkorhale.nuget\packages\jquery.3.1\Content\Scripts\jquery-3.3.1.slim.min.js' 添加到项目中。无法将 link 添加到文件 jquery-3.3.1.slim.min.js。此文件夹中已有同名文件。

原来,我需要关闭此内容的可见性。无论如何,文件会被物理复制,所以我们最终会在第一次构建后在解决方案资源管理器中看到它。这对我来说已经足够好了。

<Content Include="$(NuGetPath_jQuery)\Content\Scripts\**\*.*">
  <Link>Scripts\%(RecursiveDir)%(FileName)%(Extension)</Link>
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  <Visible>false</Visible>
</Content>