包含重复的“内容”项。 .NET Core Angle 6 Web应用程序资产文件夹中的.json文件

时间:2019-05-26 22:57:03

标签: angular visual-studio .net-core

我有一个.Net Core 2.1 Web应用程序,它使用Angular 6作为前端,是在Visual Studio 2017中开发的。

在Angular资产文件夹中,我还有一个json文件夹,其中包含一个文件:iconClasses.json。发布此内容时,我首先在ClientApp文件夹中使用ng build --prod构建了角度应用程序。如预期的那样,这会将.json文件移动到dist文件夹:

ClientApp src and dist folders showing assets/json folders

在我的.csproj中,唯一的项目组是:

    <ItemGroup>
        <Content Include="ClientApp\dist\**\*" CopyToPublishDirectory="PreserveNewest" />
    </ItemGroup>

    <ItemGroup>
        <Content Remove="appsettings.Development.json" />
        <!--<Content Remove="ClientApp\dist\assets\json\iconClasses.json" />-->
    </ItemGroup>

发布此消息会导致以下错误:

  

包含重复的“内容”项。 .NET SDK包括   默认情况下,项目目录中的“内容”项。你可以   从您的项目文件中删除这些项目,或设置   如果您想将'EnableDefaultContentItems'属性设置为'false'   明确地将它们包含在您的项目文件中。了解更多信息,   参见https://aka.ms/sdkimplicititems。重复的项目是:'ClientApp \ dist \ assets \ json \ iconClasses.json'

取消对明确删除此文件的行的注释,可以继续进行发布,但是将从最终发布的程序包中删除该文件。

将dist / assets / js文件夹中的.js文件与dist / assets / json中的.json文件进行比较,表明它们都是构建操作“内容”和“请勿复制”。将.json文件的构建操作设置为'None'只会像上面那样添加&lt;Content Remove />,而且:

    <ItemGroup>
      <None Include="ClientApp\dist\assets\json\iconClasses.json" />
    </ItemGroup>

同样,这仅导致.json文件从发布包中删除。

我确实注意到src \ assets \ json \ iconClasses.json文件的构建操作设置为“ Content”,而其他src \ assets文件设置为“ None”,所以我将.json文件设置为“ None”也。但是,这会导致相同的错误,除非dist版本也被明确删除。

将以下内容添加到我的.csproj中的PropertyGroup中,会将.json文件包含在dist / assets / json中,但随后错过了系统所需的其他文件:

<EnableDefaultContentItems>false</EnableDefaultContentItems>

那么,如何将Assets文件夹中的.json文件移至dist asset文件夹?是将EnableDefaultContentItems设置为false,找出所有丢失的文件并手动添加的唯一方法吗?

2 个答案:

答案 0 :(得分:1)

删除此:

fun main() {
    run {
        val cond = true
        val result = cond yes "True!" no "False!"
        println("ternary test($cond): $result")
    }
    run {
        val cond = false
        val result = cond yes "True!" no "False!"
        println("ternary test($cond): $result")
    }
}
  

默认情况下,.NET SDK包含项目目录中的“内容”项。您可以从项目文件中删除这些项目...

默认情况下,.NET Core SDK已包含此文件夹(以及ClientApp /中的所有其他文件) 相反,您应该尝试从已发布的位置删除src文件夹(以及您不想发布的所有其他内容,例如e2e等),例如:

    <ItemGroup>
         <Content Include="ClientApp\dist\**\*" CopyToPublishDirectory="PreserveNewest"/>
    </ItemGroup>

答案 1 :(得分:0)

解决方案:

从此更改dist文件夹的添加:

    <ItemGroup>
        <Content Include="ClientApp\dist\**\*" CopyToPublishDirectory="PreserveNewest" />
    </ItemGroup>

对此:

    <ItemGroup>
        <None Include="ClientApp\dist\**" CopyToPublishDirectory="PreserveNewest" />
    </ItemGroup>

即将其从Content更改为None


其他:

仅需要显式删除e2e和src文件夹中的.json文件,而不是整个文件夹本身:

    <ItemGroup>
        <Content Remove="appsettings.Development.json" />
        <Content Remove="ClientApp\e2e\tsconfig.e2e.json" />
        <Content Remove="ClientApp\src\tsconfig.app.json" />
        <Content Remove="ClientApp\src\tsconfig.spec.json" />
        <Content Remove="ClientApp\src\tslint.json" />
        <Content Remove="ClientApp\src\assets\json\iconClasses.json" />
    </ItemGroup>

这是因为会自动包含任何.json(和.config)文件。 wwwroot也会自动添加,但在此角度客户端应用程序中未使用。

由于我使用的是ng build --prod,所以我继续告诉VS停止尝试编译打字稿,因此将其添加到PropertyGroup中:

    <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>