Були включені повторювані елементи "Вміст". 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.