`visual studio 2017添加链接内容文件(aspnetcore)

use*_*504 3 msbuild csproj visual-studio asp.net-web-api

由于VS2017返回csproj,我再次能够添加"链接"文件......不!

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

但是......我现在发现,当我重新打开解决方案时,它说"链接文件重复"并且不加载文件.这是正确的,因为文件是在构建期间复制的.这是因为之前的Web应用程序csproj以声明方式列出了项目中的所有文件.现在它看起来是目录,只是添加其中的内容.知道如何重新开始这项工作吗?

对不起,如果不清楚我可以进一步发展,但所以我希望我保持简短的问题

谢谢!

更新:我重新安装了VS 2017.转载此案.同样的错误.我现在要给你们更详细的信息:1.我添加了一个链接文件,csproj做了这个:

  <ItemGroup>
    <None Include="..\..\..\..\Proyects\SomeProject\src\core.module.ts" Link="app\core\core.module.ts" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)
  1. 它在解决方案浏览器中显示:

在此输入图像描述

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

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

  2. 重新加载解决方案:"重复链接项".

还有一些评论:a.这发生在css文件b上.使用ts文件...它甚至不会复制它们.完全忽略副本

use*_*504 7

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

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

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

所以我的工作是以这种方式改变我的csproj:

  1. 排除链接的文件 < - 这是从vs2015改变的
  2. 添加链接的文件
  3. 复制链接的文件

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

 <ItemGroup>
    <None Remove="app\core\somefile.ts" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

加.

  <ItemGroup>
    <None Include="..\..\..\..\Projects\Core\somefile.ts">
      <Link>app\core\somefile.ts</Link>
    </None>
Run Code Online (Sandbox Code Playgroud)

复制建筑

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

我还想提一下,我对它进行了一些改进以便递归,所以我不会在那里找到所有引用,所以我的第2点看起来像这样:

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

经过多天的战斗,我必须说我对csproj 2015到xproj 2017到csproj 2017的旅程并不百分之百.我认为这是一个很好的工作,但他们用很多方式搞砸了很多程序员处理.我仍然喜欢它,但它让我(以及许多其他人)遭受了很多苦难,并且浪费了很多天才能解决这个问题.我遇到的这个问题只是众多文档中的一个,它已经过时,项目名称发生变化等等.