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

时间:2017-03-10 19:06:38

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

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

当我链接文件时,我也希望它被复制到解决方案文件夹(不是输出目录,只是解决方案),例如js文件,webpack配置文件等,我将它们共享并且"链接&#34 ;。但为了让这些真正被看到"通过visual studio,我必须将它们复制到解决方案中。我在BeforeTargets =" Build" csProj文件中的事件。这就是我在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. 它在解决方案资源管理器中显示:
  2. enter image description here

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

      &LT;目标名称=&#34; CopyLinkedContentFiles&#34; BeforeTargets =&#34;生成&#34;&GT; &LT;复制SourceFiles =&#34;%(Content.Identity)&#34; DestinationFiles =&#34;%(Content.Link)&#34; SkipUnchangedFiles =&#34;真&#34; OverwriteReadOnlyFiles =&#34;真&#34;条件=&#34;&#39;%(Content.Link)&#39; !=&#39;&#39;&#34; /&GT; &LT; /目标&GT;

    2. 重新加载解决方案:&#34;重复链接的项目&#34;。

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

1 个答案:

答案 0 :(得分:6)

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

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

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

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

  1. 排除链接的文件&lt; - 这是从vs2015改变的
  2. 添加链接的文件
  3. 复制链接的文件
  4. 所以它看起来像这样: 删除

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

    ADD。

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

    COPY ON BUILD

      <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的旅程并不百分之百。我认为这是一个很好的工作,但他们搞砸了很多程序员它被处理的方式。我仍然喜欢它,但它让我(以及许多其他人)遭受了很多苦难,并且浪费了很多天才能解决这个问题。我遇到的这个问题只是众多文档中的一个,它已经过时,项目名称发生变化等等。