重复的内容'物品包括在内。 .NET SDK包含'内容'默认情况下,项目目录中的项目

时间:2017-04-10 14:30:19

标签: asp.net asp.net-core asp.net-core-mvc

每当我向我的asp.net核心项目添加javascript或css文件并在我的bash终端中执行dotnet run时,我都会收到以下错误:

  

/usr/share/dotnet/sdk/1.0.1/Sdks/Microsoft.NET.Sdk/build/Microsoft

     

.NET.Sdk.DefaultItems.targets(188,5):错误:重复'内容'   物品包括在内。 .NET SDK包含'内容'你的物品   项目目录默认。您可以从中删除这些项目   您的项目文件,或设置' EnableDefaultContentItems'财产到   '假'如果要将它们显式包含在项目文件中。   有关更多信息,请参阅https://aka.ms/sdkimplicititems。该   重复的项目是:' wwwroot / css / BasicQuotation.css&#39 ;;   ' wwwroot的/ JS / BasicQuotation.js'   [/mnt/c/Dev/myproject/MyProject/MyProject.csproj]

     

构建失败。请修复构建错误并再次运行。

我可以通过从我的csproj文件中删除ItemGroup来解决此问题,但我认为这样做效率很高。

这在默认的Visual Studio 2017 ASP.NET核心Web应用程序(.NET Core)模板中发生。我通过右键单击wwwroot>将文件添加到我的项目中。 js文件夹,然后选择Add > New Item > JavaScript File

这是我的.csproj文件:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>

  <PropertyGroup>
    <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
  </PropertyGroup>

  <PropertyGroup>
    <UserSecretsId>aspnet-MyProject-7e1906d8-5dbd-469a-b237-d7a563081253</UserSecretsId>
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="wwwroot\lib\jquery-validation\**" />
    <Content Remove="wwwroot\lib\jquery-validation\**" />
    <EmbeddedResource Remove="wwwroot\lib\jquery-validation\**" />
    <None Remove="wwwroot\lib\jquery-validation\**" />
  </ItemGroup>

  <ItemGroup>
    <Content Include="wwwroot\css\BasicQuotation.css" />
    <Content Include="wwwroot\js\BasicQuotation.js" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.1" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="1.1.1" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="1.1.1" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.1" PrivateAssets="All" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.1" PrivateAssets="All" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.0" PrivateAssets="All" />
    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="1.1.1" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.1" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="1.1.0" PrivateAssets="All" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />
    <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="1.0.0" />
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="Data\Commands\" />
    <Folder Include="Data\Queries\" />
    <Folder Include="wwwroot\images\" />
  </ItemGroup>

</Project>

17 个答案:

答案 0 :(得分:170)

1. Click 'Show All Files' in Solution Explorer
2. Right-click over 'wwwroot' select 'Exclude From Project'
3. Right-click over 'wwwroot' select 'Include in Project'

答案 1 :(得分:94)

所以我遇到了同样的问题。我不想关闭DefaultCompileItems,因为我知道这不会“解决”问题。所以我卸载了我的项目并在Visual Studio中以文本模式打开了.csproj文件并看到了这一点。

<ItemGroup>
    <Content Include="wwwroot\css\custom-bootstrap-navbar.css" />
    <Content Include="wwwroot\images\friends-eating\image1.jpg" />
    <Content Include="wwwroot\images\friends-eating\image2.jpg" />
    <Content Include="wwwroot\images\friends-eating\image3.jpg" />
</ItemGroup>
<ItemGroup>
    <Folder Include="wwwroot\images\friends-eating\" />
</ItemGroup>

当我注释掉第一个ItemGroup块时,它起作用了。我假设发生的是该项目正在添加整个\ images \ friends-eating \文件夹,然后添加每个单独的图像,导致重复。

对于自定义css和js,项目会自动添加wwwroot \ css和wwwroot \ js,所以如果你添加了一个单独的文件(如wwwroot \ css \ custom-bootstrap-navbar.css),它将被视为重复。

答案 2 :(得分:21)

这适用于我的情况:

 <PropertyGroup>
    ...
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
  </PropertyGroup>

答案 3 :(得分:13)

当我将项目从.NET Core 1.X升级到2.0时,就会发生这种情况。这是我的解决方案。

  • 打开xxx.csproj,或右键单击项目
  • 卸载项目
  • 编辑xxx.csproj。

然后删除以<Content Include = "wwwroot\xxxxx"

开头的ItemGroup项目

答案 4 :(得分:10)

我的问题很接近但不完全相同。我的错误是这样的:

  

C:\ Program Files \ dotnet \ sdk \ 2.0.0-preview2-006497 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.NET.Sdk.DefaultItems.targets(285,5):错误:重复& #39;内容&#39;物品包括在内。 .NET SDK包含&#39;内容&#39;默认情况下,项目目录中的项目。您可以从项目文件中删除这些项目,也可以设置&#39; EnableDefaultContentItems&#39;属于&#39; false&#39;如果要将它们显式包含在项目文件中。有关更多信息,请参阅https://aka.ms/sdkimplicititems。重复的项目是:&#39; wwwroot \ js \ KOBindings.js&#39 ;; &#39; wwwroot的\ JS \ KOPleaseWait.js&#39 ;; &#39; wwwroot的\ JS \ ProjectTime \ Add.js&#39 ;; &#39; wwwroot的\ JS \ TimeAdmin \ Invoice.js&#39 ;; &#39; wwwroot的\ JS \ TimeAdmin \ PayPeriodTotals.js&#39; [C:\ Avantia Projects \ Time Card \ avantia-timesheet \ Solution \ Almanac \ Almanac.csproj]

如果我这样做了:

<EnableDefaultContentItems>false</EnableDefaultContentItems>

它无法编译,因为突然Areas无法识别。

我的解决方案,似乎很奇怪,但消息告诉我,有重复的文件:

  

重复的项目是:&#39; wwwroot \ js \ KOBindings.js&#39 ;; &#39; wwwroot的\ JS \ KOPleaseWait.js&#39 ;; &#39; wwwroot的\ JS \ ProjectTime \ Add.js&#39 ;; &#39; wwwroot的\ JS \ TimeAdmin \ Invoice.js&#39 ;; &#39; wwwroot的\ JS \ TimeAdmin \ PayPeriodTotals.js&#39;

查看我的.csproj文件:

<ItemGroup>
  <Content Include="pdf.js" />
  <Content Include="wwwroot\js\package.json" />
  <Content Include="wwwroot\js\pdf.js" />
  <Content Include="wwwroot\js\KOBindings.js" />
  <Content Include="wwwroot\js\KOPleaseWait.js" />
  <Content Include="wwwroot\js\ProjectTime\Add.js" />
  <Content Include="wwwroot\js\TimeAdmin\Invoice.js" />
  <Content Include="wwwroot\js\TimeAdmin\PayPeriodTotals.js" />
</ItemGroup>

这是整个项目中唯一的位置,这些文件是引用的(除了它们被加载的位置。)所以短语 duplicate 对我没有任何意义。但是,对这些文件进行评论,可以解决我的问题:

<ItemGroup>
  <Content Include="pdf.js" />
  <Content Include="wwwroot\js\package.json" />
  <Content Include="wwwroot\js\pdf.js" />
  <!--
    <Content Include="wwwroot\js\KOBindings.js" />
    <Content Include="wwwroot\js\KOPleaseWait.js" />
    <Content Include="wwwroot\js\ProjectTime\Add.js" />
    <Content Include="wwwroot\js\TimeAdmin\Invoice.js" />
    <Content Include="wwwroot\js\TimeAdmin\PayPeriodTotals.js" />
  -->
</ItemGroup>

我认为这与我最近安装的2.0.0-preview2-006497有关。

此外,这篇link提到了关于全球的讨论。但是不告诉我它在哪里。它谈论SDK等。答案是我的自定义.js文件。需要在恕我直言上更新或扩展该链接。希望这有助于某人。

答案 5 :(得分:6)

作为here,您可以通过将此行为添加到csproj文件中来禁用此行为(自动包含)并明确包含所有内容:

<PropertyGroup>
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
</PropertyGroup>

答案 6 :(得分:3)

就我而言,我通过删除VS中wwwroot-Directory中的所有文件解决了这个问题。 卸载并重新加载项目。 使用VS复制所有文件。 完成

答案 7 :(得分:2)

实际上,Asp.net核心会自动包含来自wwwroot\css\wwwroot\js\wwwroot\lib\位置的内容,所以尽管如此,如果您的csproj文件明确包含来自这些目录的内容,那么这些内容将被复制,因此从您csproj文件中删除内容是摆脱此错误的更好方法。删除以下内容 -

  <ItemGroup>
    <Compile Remove="wwwroot\lib\jquery-validation\**" />
    <Content Remove="wwwroot\lib\jquery-validation\**" />
    <EmbeddedResource Remove="wwwroot\lib\jquery-validation\**" />
    <None Remove="wwwroot\lib\jquery-validation\**" />   
 </ItemGroup>

  <ItemGroup>
    <Content Include="wwwroot\css\BasicQuotation.css" />
    <Content Include="wwwroot\js\BasicQuotation.js" />   
  </ItemGroup>

答案 8 :(得分:1)

并非我可以在上面的示例中看到它,以帮助其他SO搜索者。

如果在<Content Include="xxx" />文件的csproj元素中列出了两次相同的文件,也会出现此错误。

删除副本并重建。

答案 9 :(得分:1)

我的情况是我同时禁用了以下默认项。

<EnableDefaultContentItems>false</EnableDefaultContentItems>
<EnableDefaultItems>false</EnableDefaultItems>

答案 10 :(得分:1)

我发现了一个不同的正确解决方案。

  1. 右键单击您的mvc项目,然后单击编辑csproj。
  2. 如果您要在wwwroot下添加文件,只需将它们移到wwwroot下的文件夹中,让我们说它是“主题”
  3. 并删除csproj文件中的所有内容标签(如果存在,例如;

    <Content Include="wwwroot\theme\favicon.ico" />
    <Content Include="wwwroot\theme\fonts\cyrillic-ext400.woff2" />
    <Content Include="wwwroot\theme\fonts\cyrillic-ext700.woff2" />
    

    只添加此内容;

      <ItemGroup>
        <Folder Include="wwwroot\theme\" />
      </ItemGroup>
    

    所以,csproj文件应该是这样的;

        <Project Sdk="Microsoft.NET.Sdk.Web">
    
          <PropertyGroup>
            <TargetFramework>netcoreapp1.1</TargetFramework>
          </PropertyGroup>
    
          <PropertyGroup>
            <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
          </PropertyGroup>
    
          <ItemGroup>
            <Folder Include="wwwroot\theme\" />
          </ItemGroup>
          <ItemGroup>
            <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.0" />
    ...
    

    通过这种方式,我认为您正在添加主题文件夹下的所有文件。所以不要逐个包含它们,这会产生一些错误。

答案 11 :(得分:1)

在Visual Studio 2017 15.3下,使用.NET Core 2.0, EnableDefaultCompileItems对我不起作用。

我需要将它添加到我的.csproj

  <PropertyGroup>
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
  </PropertyGroup>

答案 12 :(得分:0)

我认为禁用“EnableDefaultContentItems”不是最佳选择。 手动cs-Proj文件编辑也不是一个好主意。

因此,对于我们的构建服务器管道,我们编写了一个非常小的工具,它将自动删除所有重复的条目: dotnet-csproj-cleaner

我们在Docker下运行它作为我们持续集成管道中的第一个构建步骤。

答案 13 :(得分:0)

排除并包含有重复错误的文件夹对我有效!希望这有助于其他人!

答案 14 :(得分:0)

.NET核心项目

如果您在类库中,可能需要从csproj中删除所有编译/内容元素,因为这些元素是自动包含的。

<Project Sdk="Microsoft.NET.Sdk">    
  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>
  <!-- NEEDED -->
  <ItemGroup>
    <ProjectReference />
    <ProjectReference />
  </ItemGroup>
  <!-- NOT NEEDED -->
  <ItemGroup>
   <Compile Include="Models\ExampleClass.cs" />
   <Content ... />
  </ItemGroup>
</Project>

答案 15 :(得分:0)

我只有一个文件存在同样的问题,而其他所有文件都在工作(我的所有模板都直接存储在wwwroot / content中)。该项目不是由我创建的,所以我不知道很多细节。

问题是由来回重命名修复了问题:

MyTemplate.html - 已重命名 - &gt; MyTemplate2.html - 重命名 - &gt; MyTemplate.html

注意:在第一次重命名时,我遇到了“内容配置未找到”的错误,但第二次重命名没有问题。

在此之后,我能够成功编译项目。

答案 16 :(得分:0)

我刚刚开始,当我尝试将 wwwroot 文件夹从 Web 应用程序模板复制到使用 API 模板创建的项目时出现此错误。删除引导程序为我解决了这个问题,这很好,因为我只需要 jquery。