Были добавлены повторяющиеся элементы "Содержимое"..NET SDK включает элементы "Содержимое" из каталога проекта по умолчанию

Всякий раз, когда я добавляю javascript или файл css в мой основной проект asp.net, и я выполняю dotnet run в моем терминале bash, я получаю следующую ошибку:

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

.NET.Sdk.DefaultItems.targets(188,5): ошибка: Дублировать "Контент" предметы были включены. В .NET SDK включены элементы "Содержимое" из вашего по умолчанию. Вы можете удалить эти элементы из ваш файл проекта или установите для свойства EnableDefaultContentItems значение 'false', если вы хотите явно включить их в свой файл проекта. Для получения дополнительной информации см. https://aka.ms/sdkimplicititems. Двумя экземплярами были: 'wwwroot/css/BasicQuotation.css'; 'Wwwroot/JS/BasicQuotation.js' [/mnt/c/Dev/myproject/MyProject/MyProject.csproj]

Сбой сборки. Исправьте ошибки сборки и снова запустите.

Я могу исправить это, удалив ItemGroup из моего файла csproj, но я не думаю, что это очень продуктивно.

Это происходит в стандартном шаблоне ASP.NET Core Web Application (.NET Core) Visual Studio 2017. Я добавляю файлы в свой проект, щелкнув правой кнопкой мыши папку 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>

Ответ 1

Итак, я столкнулся с этой проблемой. Я не хотел отключать DefaultCompileItems, потому что знал, что не "исправить" проблему. Поэтому я разгрузил свой проект и открыл файл .csproj в текстовом режиме в Visual Studio и увидел это.

<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-eat \, а затем добавляет каждое отдельное изображение, вызывая дублирование.

Что касается пользовательских css и js, проект автоматически добавляет wwwroot\css и wwwroot\js, поэтому, если у вас есть отдельный файл, добавленный (например, wwwroot\css\custom-bootstrap-navbar.css), он будет считаться дубликат.

Ответ 2

  • Нажмите "Показать все файлы" в обозревателе решений
  • Щелкните правой кнопкой мыши по "wwwroot", выберите "Исключить из проекта"
  • Щелкните правой кнопкой мыши по "wwwroot", выберите "Включить в проект"

Ответ 3

Это сработало в моем случае:

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

Ответ 4

Это случилось, когда я обновляю свой проект с .NET Core 1.X до 2.0 только сейчас. Вот мое решение.

  • Откройте файл xxx.csproj или щелкните правой кнопкой мыши
  • Выгрузить проект
  • Изменить xxx.csproj.

Затем удалите элементы ItemGroup, начиная с <Content Include = "wwwroot\xxxxx"

Ответ 5

Мои проблемы были близки, но не то же самое. Моя ошибка:

C:\Program Files\dotnet\sdk\2.0.0-preview2-006497\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.DefaultItems.targets(285,5): error: Duplicate ' Содержимое ". В .NET SDK по умолчанию включены элементы" Содержимое "из каталога проекта. Вы можете либо удалить эти элементы из файла проекта, либо установить для свойства EnableDefaultContentItems значение" false ", если вы хотите явно включить их в файл проекта. Для получения дополнительной информации см. https://aka.ms/sdkimplicititems. Двумя экземплярами были:" wwwroot\js\KOBindings.js"; 'Wwwroot\JS\KOPleaseWait.js'; 'Wwwroot\JS\ProjectTime\Add.js'; 'Wwwroot\JS\TimeAdmin\Invoice.js'; 'wwwroot\js\TimeAdmin\PayPeriodTotals.js' [C:\Avantia Projects\Time Card\avantia-timesheet\Solution\Almanac\Almanac.csproj]

Если я сделал это:

<EnableDefaultContentItems>false</EnableDefaultContentItems>

Он не будет компилироваться, поскольку все внезапные Areas не будут распознаны.

Мое решение, кажется странным, но сообщение говорит мне об этом, были дубликаты файлов:

Двумя экземплярами были: 'wwwroot\js\KOBindings.js'; 'Wwwroot\JS\KOPleaseWait.js'; 'Wwwroot\JS\ProjectTime\Add.js'; 'Wwwroot\JS\TimeAdmin\Invoice.js'; 'wwwroot\js\TimeAdmin\PayPeriodTotals.js'

Глядя на мой файл .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>

Это было ТОЛЬКО место во всем проекте, где эти файлы были ссылками (кроме того, где они были загружены.) Таким образом, дубликат фраз не имеет для меня никакого смысла. Однако, комментируя эти файлы как таковые, позаботился о моей проблеме:

<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, который я недавно установил.

Кроме того, ссылка упоминает о глобах. Но не говорит мне, где это. В нем говорится о SDK и тому подобное. Однако ответ был моим обычным .js файлами. Эта ссылка должна быть обновлена ​​или расширена на IMHO. Надеюсь, это поможет кому-то.

Ответ 6

Как , вы можете отключить это поведение (автоматически включить) и включить все содержимое явно, добавив это в свой csproj файл:

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

Ответ 7

В моем случае я решил это, удалив все файлы из wwwroot-Directory в VS. Выгрузите и перезагрузите проект. Скопируйте все файлы обратно с помощью VS. Готово

Ответ 8

Фактически, ядро ​​Asp.net автоматически включает контент из wwwroot\css\, wwwroot\js\ и wwwroot\lib\ location, поэтому, несмотря на это, если ваш файл 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>

Ответ 9

Не то, чтобы я мог видеть это в вашем примере выше, чтобы помочь другим поисковикам SO.

Вы также можете получить эту ошибку, если у вас есть тот же файл, указанный дважды в <Content Include="xxx" /> в файле csproj.

Удалите дубликат и перестройте.

Ответ 10

В Visual Studio 2017 15.3 с .NET Core 2.0, EnableDefaultCompileItems не работает для меня.

Мне нужно было добавить это в мой .csproj

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

Ответ 11

Я нашел другое правильное решение.

  • Щелкните правой кнопкой мыши на проекте mvc и выберите Edit csproj.
  • Если вы добавляете файлы под wwwroot, просто переместите их в папку под wwwroot, скажем, это "тема"

И удалите все теги контента в файле 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" />
...

Таким образом, я думаю, что вы добавляете все файлы в папку темы. Поэтому не включайте их один за другим, которые окружают некоторые erros.

Ответ 12

Исключить и включить обратно папки, у которых есть дубликаты ошибок, работали для меня! Надеюсь, это поможет кому-то еще!

Ответ 13

Я думаю, что отключить "EnableDefaultContentItems" не самый лучший вариант. Ручное редактирование файлов cs-Proj также не является хорошей идеей.

Итак, для нашего конвейера сервера сборки мы написали очень маленький инструмент, который будет удалять все дублированные записи автоматически: dotnet-csproj-cleaner

Мы запускаем его под Docker как первый шаг сборки в нашем конвейере непрерывной интеграции.

Ответ 14

Проекты .NET Core

Если вы находитесь в библиотеке классов, возможно, вам нужно будет удалить все элементы компиляции/содержимого из вашего 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>