2017-03-10 54 views
1

由于VS2017返回到csproj,我再次能够添加文件“作为链接”...不!`视觉工作室2017添加为链接内容文件(aspnetcore)

当我链接一个文件,我也希望它被复制到解决方案文件夹(不是输出目录,只是解决方案),例如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> 
  • 这表明在解决方案资源管理:
  • enter image description here

  • 我修改的csproj物理地复制到目标文件夹。这个资源不是一个cs文件,但是它被编译。我需要VS能够身体有它:

    <目标名称= “CopyLinkedContentFiles” BeforeTargets = “构建”> <复制SourceFiles = “%(Content.Identity)” DestinationFiles =“%(Content.Link) ! “SkipUnchangedFiles =” 真” OverwriteReadOnlyFiles = “真” 条件= “%(Content.Link)'= ''”/> < /目标>

  • 刷新解决方案: “复制链接项”。

  • 更多几个备注: a。这发生在css文件 b。有了ts文件......它并不是一成不变的。只是完全忽略了副本

    +0

    你应该能够只是将它们包括在项目中,如果你选择的链接的属性应该有一个“副本输出”选项。那是你在说什么? –

    +0

    嗨!好吧,不。这些文件是许多项目中共享的打字稿文件。 TS文件应该以vs /副本链接/可见到项目文件夹/ NOT到输出(我不需要输出这些文件。 – user5328504

    +0

    如果我不将它们添加到项目文件夹中,VS和webpack无法编译它们。 ...:'( – user5328504

    回答

    3

    好吧,我把它关了,但它不好。

    首先,让我们了解问题所在。 1.添加CONTENT(js,ts,css,images)文件“作为链接” 2.文件需要在物理上存在。为什么?在经典的Web中,您需要输出目录中的这些资源,因此只有在运行应用程序时才需要它们。由于地雷是一个webapi +角度应用程序,因此我需要对这些文件进行大量工作,并且它们必须在物理上可用于我的IDE。首先,webpack需要编译它们,我有更少的sass文件也被编译。我也做铬调试...文件需要在那里...所以你做一个MSBuild任务将文件从源位置移动到目的地。必须从源文件中再次复制文件(如果是正确的话)。这是一种标准做法,不是我自己的破解 3.在重新加载时,visual studio会将链接和tryes(虚拟)添加到项目结构中。 现在,这里的问题......文件已经存在,因为你强迫他们在那里的2点

    为什么这部作品在2015年的原因是因为在的csproj 2015年不检查文件夹结构列出其内容。文件应该在csproj中声明以便在项目结构中。现在,2017年使用了csproj和旧的“网站”项目的组合,该项目将列出目录内容。自2017年VS“看到”的文件,然后尝试添加他们时,它就会confussed ...

    所以我周围的工作是改变我的csproj这样:

    1. 排除链接文件 < - 这是来自vs2015
    2. 是什么改变了添加链接的申请
    3. 复制链接的文件

    看起来像这样: REMOVE

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

    ADD。

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

    复印在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> 
    

    后与此战斗的许多天,我必须说,我不是100%满意的csproj 2015年的征程xproj 2017年的csproj 2017年我认为这是一个很好的哈思做,但他们screwe很多程序员用它的处理方式。我仍然喜欢它,但它让我(和其他许多人)遭受了很多痛苦,并且在相似的事情上浪费了很多天。我遇到的这个问题只是众多文档中过时的项目名称变更等问题之一。