Yinelenen 'İçerik' öğeleri dahil edildi. .NET SDK, varsayılan olarak proje dizininizdeki 'İçerik' öğelerini içerir


132

Asp.net çekirdek projeme bir javascript veya css dosyası eklediğimde ve dotnet runbash terminalimde çalıştırdığımda aşağıdaki hatayı alıyorum:

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

.NET.Sdk.DefaultItems.targets (188,5): hata: Yinelenen 'İçerik' öğeleri dahil edildi. .NET SDK, varsayılan olarak proje dizininizdeki 'İçerik' öğelerini içerir. Bu öğeleri proje dosyanızdan kaldırabilir veya proje dosyanıza açıkça dahil etmek istiyorsanız 'EnableDefaultContentItems' özelliğini 'false' olarak ayarlayabilirsiniz. Daha fazla bilgi için bkz. Https://aka.ms/sdkimplicititems . Yinelenen öğeler şunlardı: 'wwwroot / css / BasicQuotation.css'; "wwwroot / js / BasicQuotation.js" [/mnt/c/Dev/myproject/MyProject/MyProject.csproj]

Yapı başarısız oldu. Lütfen yapı hatalarını düzeltin ve tekrar çalıştırın.

Bunu ItemGroupcsproj dosyamdan kaldırarak düzeltebilirim , ancak bunun çok verimli olduğunu düşünmüyorum.

Bu, varsayılan Visual Studio 2017 ASP.NET Core Web Uygulaması (.NET Core) şablonunda gerçekleşir. Dosyaları wwwroot> js klasörüne sağ tıklayarak projeme eklerim ve ardındanAdd > New Item > JavaScript File

Bu benim .csproj dosyam:

<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'yi v15.3'e güncelledikten sonra bu sorunla karşılaşıyorsanız, buraya bir göz attığınızdan emin olun . MS şimdi wwwroot gibi bazı klasörleri varsayılan olarak eklemeye karar verdi, bu da muhtemelen iki kez dahil edildikleri anlamına geliyor.
jao

@Jao'nun paylaştığı makale, bunun neden olduğunu ve nasıl düzeltileceğini çok iyi açıklıyor. Doğrudan o makaleye gidin.
Pepito Fernandez

Yanıtlar:


107

Ben de aynı sorunla karşılaştım. DefaultCompileItems'i kapatmak istemedim çünkü bunun sorunu "çözmeyeceğini" biliyordum. Bu yüzden projemi kaldırdım ve .csproj dosyasını Visual Studio'da metin modunda açtım ve bunu gördüm.

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

İlk ItemGroup bloğunu yorumladığımda işe yaradı. Olduğunu varsaydığım şey, projenin tüm \ images \ friends-eat \ klasörünü eklediği ve ardından her bir görüntüyü ekleyerek bir kopyaya neden olduğu.

Özel css ve js'ye gelince, proje otomatik olarak wwwroot \ css ve wwwroot \ js ekler, böylece eklenmiş tek bir dosyanız varsa (wwwroot \ css \ custom-bootstrap-navbar.css gibi), bu kopya olarak sayılır.


Bu <Folder Include="wwwroot\" />benim için işe yarıyor, ancak görsel stüdyo bunu daha sonra geri alıyor :(
Jaider

3
Tamam yani anlamıyorum. Görsel stüdyo aslında ne yapıyor ve neden?
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
Bunu yapmak benim için sorunu çözdü, ama gerçekten işe yaraması için ne oldu?
Rono

@Rono Görünüşe göre wwwroot dosyanızdaki tüm dosyaları .csproj dosyasında açıkça tanımlıyor. örneğin: i.imgur.com/4SPnQ5h.png
J. Schei

4
Benim için de işe yaradı - ve bence kabul edilen cevaptan çok daha güvenli bir yol.
Brinch

Benim için de çalıştı! DefaultContentItems'i devre dışı bırakmak çözümümün oluşturulmasına yardımcı oldu, ancak resimler, CSS'ler ve diğer dosyalar gösterilmiyordu.
Bruno Serrano

1
"Wwwroot" öğesini hariç tuttuğunuzda, "wwwroot" klasörünü görmek için Solution Explorer'ın üst kısmındaki "Show All Files" düğmesini (3 yaprak dağınık bir şekilde yığılmış gibi görünür) tıklamanız gerekebilir, böylece onu geri ekleyebilirsiniz içinde. Benimki kayboldu ve bu düğmeyi bulana kadar nasıl geri alacağımı bilmiyordum. Klasör, dahil olmadığını belirtmek için gri görünecektir.
James Toomey

25

Bu benim durumumda çalıştı:

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

3
Pinki'nin cevabına yaptığım yorumda da belirtildiği gibi, bunu daha fazla hataya yol açabileceğinden çözüm olarak önermem.
Matt

Aslında bu seçeneği yanlış olarak ayarlayarak daha büyük sorunlarla karşılaştım. Ayrıca yanlış olarak ayarlamamanızı da tavsiye ederim.
Rwiti

Bir Klasörün tamamen EmbeddedResource öğeleri olarak dahil edilmesinin en temiz yolu nedir?
John Zabroski

Bu wwwroot artık dahil edilmedi. Öyleyse bunu kullanmayın ...
UNeverNo

14

Şu anda projemi .NET Core 1.X'ten 2.0'a yükselttiğimde oluyor. İşte benim çözümüm.

  • Xxx.csproj'u açın veya projeye sağ tıklayın
  • Projeyi Kaldır
  • Xxx.csproj'u düzenleyin.

Ardından ItemGroup öğelerini kaldırın. <Content Include = "wwwroot\xxxxx"


Teşekkürler! Not: Doğrudan .NET Core 2.0 ile değil, en son Visual Studio sürüm 15.3 ile ilişkili görünüyor
Vincent V.

10

Sorunlarım yakındı ama tamamen aynı değildi. Benim hatam şuydu:

C: \ Program Files \ dotnet \ sdk \ 2.0.0-preview2-006497 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.NET.Sdk.DefaultItems.targets (285,5): hata: 'İçerik' öğelerini çoğalt dahil edildi. .NET SDK, varsayılan olarak proje dizininizdeki 'İçerik' öğelerini içerir. Bu öğeleri proje dosyanızdan kaldırabilir veya proje dosyanıza açıkça dahil etmek istiyorsanız 'EnableDefaultContentItems' özelliğini 'false' olarak ayarlayabilirsiniz. Daha fazla bilgi için bkz. Https://aka.ms/sdkimplicititems . Yinelenen öğeler şunlardı: '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 Projeleri \ Zaman Kartı \ avantia-zaman çizelgesi \ Çözüm \ Almanak \ Almanak.

Bunu yaptıysam:

<EnableDefaultContentItems>false</EnableDefaultContentItems>

Birdenbire Areasfark edilmeyeceği için derlenmezdi .

Çözümüm garip görünüyor, ancak mesaj bana öyle söylüyor, yinelenen dosyalar vardı:

Yinelenen öğeler şunlardı: 'wwwroot \ js \ KOBindings.js'; 'Wwwroot \ js \ KOPleaseWait.js'; 'Wwwroot \ js \ ProjectTime \ Add.js'; 'Wwwroot \ js \ TimeAdmin \ Invoice.js'; 'Wwwroot \ js \ TimeAdmin \ PayPeriodTotals.js'

Dosyama bakıyorum .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>

Bu dosyaların referans olduğu tüm proje içinde YALNIZCA konumdu (yüklendikleri yer dışında). Dolayısıyla, yineleme ifadesi bana hiçbir anlam ifade etmiyor. Ancak, bu dosyaları bu şekilde yorumlamak sorunumu halletti:

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

Bunun 2.0.0-preview2-006497yakın zamanda yüklediğim ile bir ilgisi olduğunu varsayıyorum .

Ayrıca, bu bağlantı kürelerden bahsediyor. Ama bana nerede olduğunu söyleme. SDK'lar ve benzeri hakkında konuşuyor. Yine de cevap benim özel .jsdosyalarımdı. Bu bağlantının IMHO'da güncellenmesi veya genişletilmesi gerekiyor. Umarım bu birine yardımcı olur.


Bunun neden işe yaradığını bilmek isterim. Ancak, sadece benim için çalıştı. =)
Frog Pr1nce

10

Gibi bağlantı diyor , bu davranışı (otomatik dahil) devre dışı bırakmak ve içine bu ekleyerek tüm içeriği açıkça içerebilir csprojdosyası:

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

1
Bunu csproj dosyama eklediğimde ve css / js öğe grubunu kaldırdığımda aşağıdaki hatayı alıyorum: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
"İçerik" "Derleme" değil - Değil mi?
harveyt

Bir yandan not .... Görünümler klasörünüzü açıkça dahil etmezseniz, görünümlerinizi bu ayarla yayınlamaz
17'yi

Bunu denedim ama işe yaramadı. hala aynı hatayı alıyorum
pantonis

3

Benim durumumda, bunu VS'deki wwwroot-Directory'den tüm dosyaları silerek çözdüm. Projeyi boşaltın ve yeniden yükleyin. Tüm dosyaları VS ile geri kopyalayın. Bitti


En iyi çözümlerin hiçbiri benim için işe yaramadı Bunu yorumunuzu okumadan önce yaptım ve bu kusursuz çalışıyor !!! Wwwroot'u, denetleyicileri, klasörleri görüntüledim ve onları geri ekledim ve şimdi her şey yolunda gidiyor!
revobtz

2

Aslında Asp.net çekirdek otomatik içerik barındırır wwwroot\css\, wwwroot\js\ve wwwroot\lib\senin eğer öyleyse buna rağmen konumu, csprojdosyanın açıkça size kaldırma içerik böylece Ardından, bu içerik yinelenir bu dizinlerden içerik bulunmaktadır csprojdosyanın bu hatanın kurtulmak için iyi bir yoldur. Bu yüzden aşağıdaki içeriği kaldırın-

  <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
Bu, Visual Studio'yu 15.3'e güncellerken başıma geldi. Henüz güncelleme yapmamış meslektaşlarımdaki değişiklikleri <PropertyGroup> <EnableDefaultContentItems>false</EnableDefaultContentItems> </PropertyGroup>bozmamak için, .csproj dosyasına eklemem gerekiyordu.
saluce

@saluce evet haklısınız, kendi bağlamınızda da kullanabileceğiniz aynı çözümü. seçim, saklamak isteyip istemediğine göre geliştiriciye bağlıdır EnableDefaultContentItems. Bunlar iki farklı yaklaşım
Mostafiz

Demek istediğim, yaptığım tek değişikliğin Visual Studio'yu 15.3'e yükseltmek olduğuydu. Projemde hiçbir değişiklik yapmadım, ancak yükseltmeden önce bu ayar gerekli değildi.
saluce

2

Benim durumum, varsayılan öğelerin altında her ikisini de devre dışı bıraktı.

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

1

Diğer SO arayanlara yardım etmek için yukarıdaki örneğinizde göremediğimden değil ..

Bu hatayı, aynı dosya dosyanızdaki <Content Include="xxx" />öğelerde iki kez listelendiğinde de alabilirsiniz csproj.

Kopyayı kaldırın ve yeniden oluşturun.


1

Visual Studio 2017 15.3 altında, .NET Core 2.0 ile EnableDefaultCompileItems benim için çalışmadı.

Bunu .csproj dosyama eklemem gerekiyor

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

Benim için (visual studio 15.3.4 .NET framework 4.5.2) EnableDefaultContentItems çalışmazken EnableDefaultCompileItems çalışmadı.
hlovdal

1

Farklı bir uygun çözüm buldum.

  1. Mvc projenize sağ tıklayın ve csproj düzenle'ye tıklayın.
  2. Wwwroot altında dosya ekliyorsanız, onları wwwroot altındaki bir klasöre taşıyın, "tema" diyelim

Ve varsa csproj dosyasındaki tüm içerik etiketlerini silin, bir örnek;

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

Ve sadece şunu ekleyin;

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

Yani, csproj dosyası şöyle görünmelidir;

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

Bu şekilde, tüm dosyaları tema klasörünün altına eklediğinizi düşünüyorum. Bu yüzden, bazı hatalar meydana getiren onları tek tek dahil etmeyin.


1

.NET Core Projeleri

Bir sınıf kitaplığındaysanız, otomatik olarak dahil edildikleri için muhtemelen tüm Derleme / İçerik öğelerini csproj'unuzdan kaldırmanız gerekecektir.

<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

Yinelenen hata olan klasörleri hariç tutmak ve geri eklemek benim için çalıştı! Umarım bu başka birine yardımcı olur!


0

"EnableDefaultContentItems" i devre dışı bırakmanın en iyi seçenek olmadığını düşünüyorum. Manuelcs-Proj dosya düzenleme de hiç iyi bir fikir değil.

Bu nedenle, derleme sunucusu ardışık düzenimiz için, yinelenen tüm girişleri otomatik olarak kaldıracak çok küçük bir araç yazdık : dotnet-csproj-cleaner

Sürekli entegrasyon ardışık düzenimizde ilk derleme adımı olarak Docker altında çalıştırıyoruz.


Güzel görünüyor ama neden wwwroot yolu olan projelerle sınırlı?
John Zabroski

Standart VS içerik konumudur ve yolu varsayılan olarak dahil edilmiştir. Daha karmaşık bir çözüme ihtiyacınız varsa - lütfen çekme isteği göndermekten çekinmeyin. Ek komut satırı argümanları ekleyerek çok kolay olmalı. Teşekkür ederim.
anakod

0

Aynı sorunu sadece bir dosyayla yaşadım ve diğerleri çalışıyordu (tüm şablonlarım doğrudan wwwroot / content içinde saklanıyordu). Proje benim tarafımdan oluşturulmadı, bu yüzden çok fazla ayrıntı bilmiyorum.

Sorun, ileri geri yeniden adlandırılarak çözüldü şu sorunun bulunduğu dosyayı :

MyTemplate.html - yeniden adlandırıldı -> MyTemplate2.html - yeniden adlandırıldı -> MyTemplate.html

Not : İlk yeniden adlandırmada " içerik yapılandırması bulunamadı " satırlarında bir hata aldım , ancak ikinci yeniden adlandırma sorunsuz çalıştı.

Bundan sonra projeyi başarıyla derleyebildim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.