【问题标题】:`visual studio 2017 add as link content files (aspnetcore)`visual studio 2017 添加为链接内容文件 (aspnetcore)
【发布时间】:2017-03-10 19:06:38
【问题描述】:

自从 VS2017 返回 csproj 后,我又可以“作为链接”添加文件了……不!

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

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

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

谢谢!

更新:我已经重新安装了 VS 2017。重现了案例。同样的错误。我现在给大家详细介绍一下: 1.我添加了一个链接文件,csproj这样做了:

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

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

    目标>

  2. 重新加载解决方案:“重复的链接项”。

还有几点说明: 一种。这发生在 css 文件上 湾。使用 ts 文件...它甚至不会复制它们。完全忽略副本

【问题讨论】:

  • 您应该能够将它们包含在项目中,如果您选择链接的属性,则应该有一个“复制到输出”选项。你说的是这个吗?
  • 嗨!嗯……不。这些文件是许多项目之间共享的打字稿文件。 TS 文件应该在 vs 中链接/可见/复制到项目文件夹/而不是输出(我不需要输出这些文件。
  • 如果我不将它们添加到项目的文件夹中,VS 和 webpack 无法编译它们...... :'(
  • 那么为什么不物理添加它们并将其设置为不再复制到输出?
  • 这些文件已链接。也就是说,我有一个 BASE 项目,其中包含我的许多组件、服务和全局内容。如果我在“基础”中进行更改,所有其他项目都应该自动更改。我在基础项目 ts、配置文件、视图等中有各种各样的东西。这些文件必须可以被 VS 访问,但只有少数文件可以进入输出文件夹。不过,我需要将它们联系起来,我相信

标签: visual-studio asp.net-web-api msbuild csproj


【解决方案1】:

好吧,我把它拉下来了,但它并不好。

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

之所以在 2015 年有效,是因为 2015 年的 csproj 不会检查文件夹结构以列出其内容。文件应在 csproj 中声明,以便在项目结构中。现在 2017 混合使用了 csproj 和旧的“网站”项目,该项目将列出目录内容。由于 vs 2017 “看到”文件,因此在尝试添加它们时会感到困惑......

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

  1. 排除链接的文件
  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% 满意。我认为它做得很好,但他们把很多程序员搞砸了处理方式。我仍然喜欢它,但它让我(和许多其他人)遭受了很多痛苦,并在类似的事情上浪费了很多天。我面临的这个问题只是过时文档、项目名称更改等众多文档中的一个。

【讨论】:

  • 非常感谢,只是花了一些时间试图弄清楚这一点!似乎有点 hacky,但我没有看到其他选择
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
  • 2015-04-06
  • 2018-11-16
  • 2019-06-15
相关资源
最近更新 更多