Item 'Konten' duplikat dimasukkan. .NET SDK menyertakan item 'Konten' dari direktori proyek Anda secara default


132

Setiap kali saya menambahkan file javascript atau css ke proyek inti asp.net saya dan saya jalankan dotnet rundi terminal bash saya, saya mendapatkan kesalahan berikut:

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

.NET.Sdk.DefaultItems.targets (188,5): error: Duplikat 'Konten' disertakan. .NET SDK menyertakan item 'Konten' dari direktori proyek Anda secara default. Anda dapat menghapus item-item ini dari file proyek Anda, atau mengatur properti 'EnableDefaultContentItems' menjadi 'false' jika Anda ingin secara eksplisit memasukkannya dalam file proyek Anda. Untuk informasi lebih lanjut, lihat https://aka.ms/sdkimplicititems . Item duplikat adalah: 'wwwroot / css / BasicQuotation.css'; 'wwwroot / js / BasicQuotation.js' [/mnt/c/Dev/myproject/MyProject/MyProject.csproj]

Bangunan gagal. Harap perbaiki kesalahan pembuatan dan jalankan kembali.

Saya dapat memperbaikinya dengan menghapus ItemGroupdari file csproj saya, tetapi saya rasa itu tidak produktif.

Ini terjadi dalam template Visual Studio 2017 ASP.NET Core Web Application (.NET Core) default. Saya menambahkan file ke proyek saya dengan mengklik kanan folder wwwroot> js dan kemudian pilihAdd > New Item > JavaScript File

Ini adalah file .csproj saya:

<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
Jika Anda mengalami masalah ini setelah memperbarui VS2017 ke v15.3, pastikan Anda melihatnya di sini . MS memutuskan untuk memasukkan folder tertentu seperti wwwroot secara default sekarang, yang berarti mereka mungkin dimasukkan dua kali.
jao

Artikel yang @jao bagikan, menjelaskan dengan sangat baik mengapa ini terjadi dan bagaimana cara memperbaikinya. Langsung saja ke artikel itu.
Pepito Fernandez

Jawaban:


107

Jadi saya mengalami masalah yang sama. Saya tidak ingin mematikan DefaultCompileItems karena saya tahu itu tidak akan "memperbaiki" masalah. Jadi saya membongkar proyek saya dan membuka file .csproj dalam mode teks di Visual Studio dan melihat ini.

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

Ketika saya mengomentari blok ItemGroup pertama, itu berhasil. Apa yang saya asumsikan sedang terjadi adalah bahwa proyek ini menambahkan seluruh folder \ images \ friends-eating \ dan kemudian menambahkan setiap gambar individu, menyebabkan duplikasi.

Sejauh custom css dan js, proyek secara otomatis menambahkan wwwroot \ css dan wwwroot \ js jadi jika Anda memiliki file individual ditambahkan (seperti wwwroot \ css \ custom-bootstrap-navbar.css) itu akan dihitung sebagai duplikat.


Ini <Folder Include="wwwroot\" />bekerja untuk saya, tetapi visual studio membatalkannya nanti :(
Jaider

3
Ok jadi saya tidak mengerti. Apa yang sebenarnya dilakukan studio visual dan mengapa?
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
Melakukan ini memecahkan masalah bagi saya, tetapi apa yang sebenarnya terjadi untuk membuatnya bekerja?
Rono

@Rono Sepertinya secara eksplisit mengidentifikasi semua file dalam file wwwroot Anda dalam file .csproj. mis: i.imgur.com/4SPnQ5h.png
J. Schei

4
Bekerja untuk saya juga - dan cara yang jauh lebih aman menurut saya daripada jawaban yang diterima.
brinch

Itu juga berhasil untuk saya! Menonaktifkan DefaultContentItems membantu membangun solusi saya, tetapi gambar, CSS, dan file lainnya tidak muncul.
Bruno Serrano

1
Setelah Anda mengecualikan "wwwroot", Anda mungkin harus mengklik tombol "Tampilkan Semua File" (yang terlihat seperti 3 lembar kertas yang ditumpuk secara berantakan) di bagian atas Solution Explorer untuk melihat folder "wwwroot" sehingga Anda dapat menambahkannya kembali masuk. Punyaku menghilang dan aku tidak tahu bagaimana mendapatkannya kembali sampai aku menemukan tombol ini. Folder akan terlihat berwarna abu-abu untuk mengindikasikan tidak disertakan.
James Toomey

25

Ini berhasil dalam kasus saya:

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

3
Seperti yang dinyatakan dalam komentar saya untuk jawaban Pinki, saya tidak akan mengusulkan ini sebagai solusi karena ini dapat menyebabkan lebih banyak kesalahan.
Matt

Saya benar-benar mengalami masalah yang lebih besar mengatur opsi ini ke false. Saya juga merekomendasikan untuk tidak mengaturnya ke false.
Rwiti

Apa cara paling bersih untuk mendapatkan Folder untuk dimasukkan sepenuhnya sebagai elemen EmbeddedResource?
John Zabroski

Setelah wwwroot ini tidak dimasukkan lagi. Jadi lebih baik jangan gunakan ini ...
UNeverNo

14

Itu terjadi ketika saya memutakhirkan proyek saya dari .NET Core 1.X ke 2.0 sekarang. Ini solusinya.

  • Buka xxx.csproj, atau proyek klik kanan
  • Bongkar Proyek
  • Edit xxx.csproj.

Kemudian, hapus itemGroup item mulai dengan <Content Include = "wwwroot\xxxxx"


Terima kasih! Catatan: Tampaknya ini terkait dengan Visual Studio versi 15.3 terbaru, tidak secara langsung ke .NET Core 2.0
Vincent V.

10

Masalah saya sudah dekat tetapi tidak persis sama. Kesalahan saya adalah ini:

C: \ Program Files \ dotnet \ sdk \ 2.0.0-preview2-006497 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.NET.Sdk.DefaultItems.targets (285,5): kesalahan: Gandakan item 'Konten' dimasukkan. .NET SDK menyertakan item 'Konten' dari direktori proyek Anda secara default. Anda bisa menghapus item-item ini dari file proyek Anda, atau mengatur properti 'EnableDefaultContentItems' menjadi 'false' jika Anda ingin secara eksplisit memasukkannya dalam file proyek Anda. Untuk informasi lebih lanjut, lihat https://aka.ms/sdkimplicititems . Item duplikat adalah: '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.

Jika saya melakukan ini:

<EnableDefaultContentItems>false</EnableDefaultContentItems>

Itu tidak akan dikompilasi karena tiba-tiba Areastidak akan dikenali.

Solusi saya, sepertinya aneh, tetapi pesannya memberi tahu saya, ada file duplikat:

Item duplikat adalah: 'wwwroot \ js \ KOBindings.js'; 'wwwroot \ js \ KOPleaseWait.js'; 'wwwroot \ js \ ProjectTime \ Add.js'; 'wwwroot \ js \ TimeAdmin \ Invoice.js'; 'wwwroot \ js \ TimeAdmin \ PayPeriodTotals.js'

Melihat .csprojfile saya :

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

Ini adalah lokasi HANYA dalam seluruh proyek di mana file-file ini referensi (selain dari mana mereka dimuat.) Jadi frasa duplikat tidak masuk akal bagi saya. Namun, mengomentari file-file itu seperti itu, mengurus masalah saya:

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

Saya menganggap ini ada hubungannya dengan 2.0.0-preview2-006497yang saya instal baru-baru ini.

Juga, tautan ini menyebutkan pembicaraan tentang gumpalan. Tapi tidak memberitahuku di mana itu. Ini berbicara tentang SDK dan semacamnya. Namun jawabannya adalah .jsfile khusus saya . Tautan itu perlu diperbarui atau diperluas di IMHO. Semoga ini bisa membantu seseorang.


Ingin tahu mengapa ini berhasil. Namun, hanya bekerja untuk saya. =)
Frog Pr1nce

10

Seperti kata tautan , Anda dapat menonaktifkan perilaku ini (sertakan otomatis) dan sertakan semua konten secara eksplisit dengan menambahkan ini ke csprojfile Anda :

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

1
Ketika saya menambahkan itu ke file csproj saya dan saya menghapus itemgroup css / js, saya mendapatkan kesalahan berikut: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.
jao

2
"Konten" bukan "Kompilasi" - Bukan?
Harveyt

Satu catatan samping .... jika Anda tidak secara eksplisit memasukkan folder Views Anda, itu tidak akan mempublikasikan pandangan Anda dengan pengaturan ini
saluce

Saya mencoba ini tetapi tidak berhasil. masih mendapatkan kesalahan yang sama
pantonis

3

Dalam kasus saya, saya menyelesaikan ini dengan menghapus semua file dari Direktori-wwwroot di VS. Bongkar dan muat ulang Proyek. Salin semua file kembali dengan VS. Selesai


Tidak ada solusi teratas yang bekerja untuk saya. Saya melakukan ini sebelum membaca komentar Anda dan ini berfungsi dengan sempurna !!! Saya mengecualikan wwwroot, pengontrol, folder tampilan dan menambahkannya kembali dan sekarang semuanya berfungsi dengan baik!
revobtz

2

Sebenarnya, inti Asp.net secara otomatis memasukkan konten dari wwwroot\css\, wwwroot\js\dan wwwroot\lib\lokasi, jadi meskipun ini jika csprojfile Anda secara eksplisit memasukkan konten dari direktori tersebut maka konten tersebut akan diduplikasi sehingga menghapus konten dari csprojfile Anda adalah cara yang lebih baik untuk menghilangkan kesalahan ini. Jadi hapus konten di bawah ini-

  <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
Ini terjadi pada saya saat memperbarui Visual Studio ke 15.3. Untuk mencegah perubahan pada kolega saya yang belum memperbarui, saya harus menambahkan <PropertyGroup> <EnableDefaultContentItems>false</EnableDefaultContentItems> </PropertyGroup>ke file .csproj.
bernilai

@ menghargai ya Anda benar, solusi yang sama dapat Anda gunakan dalam konteks Anda juga. pilihan didasarkan pada pengembang apakah dia ingin tetap EnableDefaultContentItemsatau tidak. Mereka adalah dua pendekatan yang berbeda
Mostafiz

Maksud saya adalah bahwa satu-satunya perubahan yang saya buat adalah meningkatkan Visual Studio ke 15.3. Saya tidak membuat perubahan pada proyek saya, tetapi sebelum upgrade, pengaturan ini tidak diperlukan.
bernilai

2

Kasus saya, saya menonaktifkan keduanya di bawah item default.

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

1

Bukannya saya bisa melihatnya di contoh Anda di atas, untuk membantu pencari SO lainnya ..

Anda juga bisa mendapatkan kesalahan ini ketika Anda memiliki file yang sama tercantum dua kali dalam <Content Include="xxx" />elemen dalam csprojfile Anda .

Hapus duplikat dan buat kembali.


1

Di bawah Visual Studio 2017 15.3, dengan .NET Core 2.0, EnableDefaultCompileItems tidak bekerja untuk saya.

Saya perlu menambahkan ini ke .csproj saya

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

Bagi saya (visual studio 15.3.4 .NET framework 4.5.2) EnableDefaultContentItems tidak berfungsi sementara EnableDefaultCompileItems melakukannya.
hlovdal

1

Saya menemukan solusi tepat yang berbeda.

  1. Klik kanan pada proyek MVC Anda dan klik Edit csproj.
  2. Jika Anda menambahkan file di bawah wwwroot, cukup pindahkan ke folder di bawah wwwroot, katakan saja "tema"

Dan hapus semua tag konten dalam file csproj jika ada, misalnya;

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

Dan hanya tambahkan ini;

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

Jadi, file csproj harus seperti ini;

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

Dengan cara itu, saya pikir Anda menambahkan semua file di bawah folder tema. Jadi tidak termasuk mereka satu per satu yang muncul beberapa erro.


1

.NET Core Projects

Jika Anda berada di perpustakaan kelas, mungkin Anda harus menghapus semua elemen Kompilasi / Konten dari csproj Anda karena sudah termasuk secara otomatis.

<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

Mengecualikan dan Termasuk kembali folder yang memiliki kesalahan duplikat berfungsi untuk saya! Semoga ini bisa membantu orang lain!


0

Saya pikir apa yang menonaktifkan "EnableDefaultContentItems" bukan pilihan terbaik. cs-ProjPengeditan file manual juga bukan ide yang baik sama sekali.

Jadi untuk pipeline server build kami, kami menulis alat yang sangat kecil yang akan menghapus semua entri yang digandakan secara otomatis: dotnet-csproj-cleaner

Kami menjalankannya di bawah Docker sebagai langkah pembangunan pertama dalam pipa integrasi berkesinambungan kami.


Kelihatannya bagus tetapi mengapa itu terbatas pada proyek dengan jalur wwwroot?
John Zabroski

Lokasi konten VS standar dan jalurnya disertakan secara default. Jika Anda membutuhkan solusi yang lebih rumit - silakan mengirimkan permintaan tarik. Seharusnya sangat mudah dengan menambahkan argumen baris perintah tambahan. Terima kasih.
anakod

0

Saya memiliki masalah yang sama dengan hanya file, dan semua yang lain berfungsi (semua template saya disimpan langsung di wwwroot / konten). Proyek ini tidak saya buat jadi saya tidak tahu banyak detail.

Masalah telah diperbaiki dengan mengganti nama file dengan masalah:

MyTemplate.html - berganti nama -> MyTemplate2.html - berganti nama -> MyTemplate.html

Catatan : Pada saat rename pertama, saya mendapat kesalahan dengan sesuatu di sepanjang baris " konfigurasi konten tidak ditemukan ", tetapi rename kedua bekerja tanpa masalah.

Setelah ini saya berhasil menyusun proyek.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.