Були включені повторювані елементи "Вміст". SDK SDK .NET за замовчуванням містить елементи "Вміст" із каталогу вашого проекту


132

Кожного разу, коли я додаю файл JavaScript або css до свого основного проекту asp.net і виконую dotnet runв баш-терміналі, я отримую таку помилку:

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

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

Не вдалося зібрати. Виправте помилки збирання та запустіть знову.

Я можу це виправити, видаливши ItemGroupз мого файлу csproj, але не думаю, що це дуже продуктивно.

Це відбувається в шаблоні веб-додатків Visual Studio 2017 ASP.NET Core (.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>

13
Якщо ви зіткнулися з цією проблемою після оновлення VS2017 до версії 15.3, переконайтесь, що ви тут подивіться . MS вирішили включити певні папки, такі як wwwroot за замовчуванням зараз, це означає, що вони, ймовірно, включаються двічі.
— jao

У статті, яку поділився @jao, дуже добре пояснюється, чому це відбувається і як це виправити. Просто переходьте до цієї статті.
— Пепіто Фернандес

Відповіді:


107

Тож я зіткнувся з цим самим питанням. Я не хотів вимикати 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-eating \, а потім додає кожне окреме зображення, викликаючи дублювання.

Що стосується спеціальних css та js, проект автоматично додає wwwroot \ css та wwwroot \ js, тож якщо у вас доданий індивідуальний файл (наприклад, wwwroot \ css \ custom-bootstrap-navbar.css), він вважатиметься дублікатом.


Це <Folder Include="wwwroot\" />працює для мене, але візуальна студія скасує, що пізніше :(
— Jaider,

3
Гаразд, я не розумію. Що насправді робить візуальна студія і чому?
— tnk479

194
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'

3
Це вирішило проблему для мене, але що насправді сталося, щоб вона спрацювала?
— Rono

@Rono Схоже, він чітко ідентифікує всі файли вашого файлу wwwroot у файлі .csproj. наприклад: i.imgur.com/4SPnQ5h.png
— J. Schei

4
Працював і для мене - і на мою думку набагато безпечніший шлях, ніж прийнята відповідь.
— Бринч

Це працювало і для мене! Вимкнення DefaultContentItems допомогло створити моє рішення, але зображення, CSS та інші файли не відображалися.
— Бруно Серрано

1
Як тільки ви вилучите "wwwroot", вам, можливо, доведеться натиснути кнопку "Показати всі файли" (яка виглядає як 3 аркуші паперу безладно складені) у верхній частині Провідника рішень, щоб побачити папку "wwwroot", щоб ви могли її додати назад мін. Шахта зникла, і я не знав, як її повернути, поки не знайшов цю кнопку. Папка буде виглядати сірою, щоб вказати, що вона не включена.
— Джеймс Тумі

25

У моєму випадку це спрацювало:

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

3
Як сказано в моєму коментарі до відповіді Пінкі, я б не пропонував це як рішення, оскільки це може призвести до більшої кількості помилок.
— Метт

Я фактично зіткнувся з більшими проблемами, встановивши цю опцію як хибну. Я також рекомендую не встановлювати значення false.
— Rwiti

Який найчистіший спосіб дозволити папку повністю включатись як елементи EmbeddedResource?
— Іван Заброський

Після цього wwwroot більше не включався. Тож краще не користуйтеся цим ...
— UNeverNo

14

Це трапляється, коли я зараз модернізую свій проект з .NET Core 1.X до 2.0. Ось моє рішення.

  • Відкрийте файл xxx.csproj або клацніть правою кнопкою миші проект
  • Розвантажити проект
  • Редагувати xxx.csproj.

Потім видаліть елементи ItemGroup, починаючи з <Content Include = "wwwroot\xxxxx"


Дякую! Примітка. Схоже, це стосується останньої версії Visual Studio 15.3, не безпосередньо до .NET Core 2.0
— Вінсент В.

10

Мої питання були близькими, але не точно. Моя помилка була така:

C: \ програмні файли \ dotnet \ sdk \ 2.0.0-preview2-006497 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.NET.Sdk.DefaultItems.targets (285,5): помилка: дублювання елементів "Вміст" були включені. SDK SDK .NET за замовчуванням містить елементи "Вміст" із каталогу вашого проекту. Ви можете або видалити ці елементи з файлу проекту, або встановити властивість "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.

Якби я це зробив:

<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. Сподіваюся, що це комусь допоможе.


Хочеться знати, чому це працює. Однак просто працював на мене. =)
— Жаба Pr1nce

10

Як говориться в посиланні , ви можете відключити цю поведінку (автоматично включити) і включити весь вміст явно, додавши це у свій csprojфайл:

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

1
Коли я додаю це до свого файлу csproj і видаляю css / js itemgroup, я отримую таку помилку:CSC : error CS5001: Program does not contain a static 'Main' method suitable for an entry point [/mnt/c/Dev/myproject/MyProject/MyProject.csproj] The build failed. Please fix the build errors and run again.
— яо

2
"Вміст" не "Компілювати" - чи не так?
— harveyt

Одне бокове зауваження .... якщо ви прямо не включите свою папку Views, вона не опублікує ваші перегляди за допомогою цього налаштування
— привітайте

Я спробував це, але не вийшло. як і раніше отримують ту саму помилку
— пантоніс

3

У моєму випадку я вирішив це, видаливши всі файли з wwwroot-Directory у VS. Вивантажте та перезавантажте проект. Скопіюйте всі файли назад в VS. Зроблено


Жодне з найкращих рішень для мене не працювало. Я це робив, перш ніж прочитати ваш коментар, і це працює бездоганно !!! Я виключив wwwroot, контролери, переглядає папки і додав їх назад, і тепер все працює нормально!
— revobtz

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>

1
Це сталося зі мною під час оновлення Visual Studio до 15.3. Щоб не допустити змін до моїх колег, які ще не оновлювались, мені довелося додати <PropertyGroup> <EnableDefaultContentItems>false</EnableDefaultContentItems> </PropertyGroup>у файл .csproj.
— салюс

@saluce так, ви праві, те саме рішення ви можете використовувати і в вашому контексті. вибір базується на розробнику, хоче він зберегти EnableDefaultContentItemsчи ні. У них два різні підходи
— Мостафіз

Моя думка полягала в тому, що єдиною зміною, яку я вніс, було оновлення Visual Studio до 15.3. Я не вносив жодних змін до свого проекту, але до оновлення це налаштування не потрібно.
— салюс

2

У моєму випадку я відключений обидва пункти за замовчуванням.

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

1

Не те, що я бачу це у вашому прикладі вище, щоб допомогти іншим шукачам SO.

Ви також можете отримати цю помилку, коли у вас є один і той самий файл, перерахований двічі в <Content Include="xxx" />елементах вашого csprojфайлу.

Видаліть дублікат і відновіть.


1

Під Visual Studio 2017 15.3, з .NET Core 2.0, EnableDefaultCompileItems для мене не працював.

Мені потрібно було додати це до мого .csproj

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

Для мене (візуальна студія 15.3.4 .NET Framework 4.5.2) EnableDefaultContentItems не працював, тоді як це робило EnableDefaultCompileItems.
— hlovdal

1

Я знайшов інше правильне рішення.

  1. Клацніть правою кнопкою миші на проект mvc та натисніть кнопку Редагувати csproj.
  2. Якщо ви додаєте файли під 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" />
...

Таким чином, я думаю, ви додаєте всі файли в папку з темами. Тому не включайте їх по черзі, що викликає деякі помилки.


1

.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>

0

Виключення та включення назад папок із дублюючими помилками працювало для мене! Сподіваюсь, це допомагає комусь іншому!


0

Я думаю, що відключення "EnableDefaultContentItems" - не найкращий варіант. Ручне cs-Projредагування файлів також зовсім не найкраща ідея.

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

Ми виконуємо це під Docker як перший крок побудови в нашому конвеєрі безперервної інтеграції.


Здається приємно, але чому він обмежений проектами з маршрутом wwwroot?
— Джон Заброський

Це стандартне розташування вмісту VS, і шлях включений за замовчуванням. Якщо вам потрібно більш складне рішення - будь ласка, надішліть запит на тягу. Це буде дуже просто, додавши додаткові аргументи командного рядка. Дякую.
— anakod

0

У мене була така ж проблема лише з файлом, і всі інші працювали (усі мої шаблони зберігалися безпосередньо у wwwroot / content). Проект не був створений мною, тому я не знаю багато деталей.

Проблема була усунена шляхом перейменування вперед і назад файлу з проблемою:

MyTemplate.html - перейменовано -> MyTemplate2.html - перейменовано -> MyTemplate.html

Примітка . Під час першого перейменування у мене з’явилася помилка з чимось уздовж рядків " конфігурація вмісту не знайдена ", але друга перейменування працювала без проблем.

Після цього мені вдалося скласти проект успішно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.