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

Pinski
sumber
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'
Dzhefer
sumber
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>
Harveyt
sumber
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"

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

Grandizer
sumber
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>
Dmitry
sumber
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

Alex Freund
sumber
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>
Mostafiz
sumber
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>
Duy Hoang
sumber
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.

Sam
sumber
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>
Kyriacos
sumber
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.

Lost_In_Library
sumber
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>
Razvan Dumitru
sumber
0

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

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

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

Razvan
sumber