`visual studio 2017 添加为 link 内容文件 (aspnetcore)

`visual studio 2017 add as link content files (aspnetcore)

自从 VS2017 返回到 csproj,我又可以添加文件了 "as link"...不是!

当我 link 一个文件时,我也希望将它复制到解决方案文件夹(不是输出目录,只是解决方案),例如 js 文件、webpack 配置文件等,我将它们共享并 "linked"。但是为了让 "seen" 真正成为 visual studio,我必须将它们复制到解决方案中。我在 csProj 文件的 BeforeTargets="Build" 事件中执行此操作。在 project.json 更改之前我就是这样做的(在 project.json 期间我根本没有这样做)。

但是...我现在发现,当我重新打开解决方案时,它显示 "linked file duplicated" 并且不加载文件。这是正确的,因为该文件是在构建期间复制的。这曾经起作用,因为以前的 Web 应用程序 csproj 以声明方式列出项目中的所有文件。现在它查看目录并添加其中的任何内容。 知道如何让这项工作再次发挥作用吗?

抱歉,如果不清楚我可以进一步发展,但 S.O 希望我的问题简短一些

谢谢!

更新:我已经重新安装了 VS 2017。重现了案例。同样的错误。我现在要给你们更详细的信息: 1. 我添加了一个 linked 文件,csproj 这样做了:

  <ItemGroup>
    <None Include="..\..\..\..\Proyects\SomeProject\src\core.module.ts" Link="app\core\core.module.ts" />
  </ItemGroup>
  1. 它在解决方案资源管理器中显示:

  1. 我修改了 csproj 以将其物理复制到目标文件夹。此资源不是 cs 文件,但已编译。我需要 vs 才能实际拥有它:

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

  2. 重新加载解决方案:"duplicated linked item"。

补充几点: 一种。这发生在 css 个文件上 b.使用 ts 文件...它甚至不复制它们。完全忽略副本

好的,我成功了,但效果并不好。

首先,让我们了解问题所在。 1. 添加内容(js、ts、css、图片)文件"as link" 2. 文件需要物理存在。为什么?在经典网络中,您需要输出目录中的那些资源,因为只有 运行 应用程序才需要它们。由于 mines 是一个 webapi + angular 应用程序,我实际上需要对这些文件进行大量处理,而且它们必须可供我的 IDE 实际使用。首先,webpack 需要编译它们,我有 less 和 sass 文件也被编译。我也做 chrome 调试...文件需要在那里...所以你做一个 msbuild 任务来将文件从它们的源位置移动到你的目的地。文件必须从其来源再次复制(如果已处理)。这是标准做法,不是我自己的黑客 3. 重新加载时,visual studio 看到链接并尝试(虚拟地)将它们添加到项目结构中。现在问题来了......文件已经存在,因为你强迫它们存在于第 2 点

这在 2015 年有效的原因是因为 2015 年的 csproj 不检查文件夹结构以列出其内容。文件应在 csproj 中声明,以便位于项目结构中。现在 2017 年混合使用 csproj 和旧的 "website" 项目,它将列出目录内容。由于 vs 2017 "sees" 文件,然后在尝试添加它们时会感到困惑...

所以我的解决方法是以这种方式更改我的 csproj:

  1. 排除链接文件 <-- 这是相对于 vs2015 的变化
  2. 添加链接字段
  3. 复制链接文件

所以它看起来像这样: 删除

 <ItemGroup>
    <None Remove="app\core\somefile.ts" />
  </ItemGroup>

添加。

  <ItemGroup>
    <None Include="..\..\..\..\Projects\Core\somefile.ts">
      <Link>app\core\somefile.ts</Link>
    </None>

构建时复制

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

我还想提一下,我对其进行了一些改进以使其成为递归的,因此我不会在其中包含所有引用,因此我的第 2 点实际上如下所示:

<None Include="..\..\..\..\Projects\Core\**\*.*">
  <Link>app\Core\%(RecursiveDir)%(FileName)%(Extension)</Link>
</None>

经过多天的努力,我必须说我对 csproj 2015 到 xproj 2017 到 csproj 2017 的旅程不是 100% 满意。我认为这是一个很好的 harth,但他们搞砸了很多程序员处理方式。我仍然喜欢它,但它让我(和许多其他人)遭受了很多痛苦,并在类似的事情上浪费了很多天。我遇到的这个问题只是大量过时的文档、项目名称更改等问题中的一个。