Sono stati inclusi elementi duplicati "Contenuto". .NET SDK include gli elementi "Contenuto" dalla directory del progetto per impostazione predefinita


132

Ogni volta che aggiungo un file javascript o css al mio progetto principale asp.net ed eseguo dotnet runnel mio terminale bash, ottengo il seguente errore:

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

.NET.Sdk.DefaultItems.targets (188,5): errore: sono stati inclusi elementi "Content" duplicati. .NET SDK include gli elementi "Contenuto" dalla directory del progetto per impostazione predefinita. È possibile rimuovere questi elementi dal file di progetto o impostare la proprietà "EnableDefaultContentItems" su "false" se si desidera includerli esplicitamente nel file di progetto. Per ulteriori informazioni, consultare https://aka.ms/sdkimplicititems . Gli elementi duplicati erano: 'wwwroot / css / BasicQuotation.css'; 'wwwroot / js / BasicQuotation.js' [/mnt/c/Dev/myproject/MyProject/MyProject.csproj]

La compilazione non è riuscita. Correggi gli errori di build ed esegui di nuovo.

Posso risolvere questo problema rimuovendo ItemGroupdal mio file csproj, ma non credo sia molto produttivo.

Ciò accade nel modello predefinito di applicazione Web ASP.NET Core di Visual Studio 2017 (.NET Core). Aggiungo i file al mio progetto facendo clic con il tasto destro sulla cartella wwwroot> js e quindi selezionoAdd > New Item > JavaScript File

Questo è il mio 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
Se stai riscontrando questo problema dopo aver aggiornato VS2017 a v15.3, assicurati di dare un'occhiata qui . MS ha deciso di includere alcune cartelle come wwwroot per impostazione predefinita ora, il che significa che probabilmente sono incluse due volte.
jao,

L'articolo che @jao ha condiviso, spiega molto bene perché questo accade e come risolverlo. Vai direttamente a quell'articolo.
Pepito Fernandez,

Risposte:


107

Quindi ho riscontrato questo stesso problema. Non volevo disattivare DefaultCompileItems perché sapevo che non avrebbe "risolto" il problema. Quindi ho scaricato il mio progetto e ho aperto il file .csproj in modalità testo in Visual Studio e ho visto questo.

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

Quando ho commentato il primo blocco ItemGroup, ha funzionato. Quello che presumo stia accadendo è che il progetto sta aggiungendo l'intera cartella \ images \ friends-eating \ e quindi aggiungendo ogni singola immagine, causando una duplicazione.

Per quanto riguarda css e js personalizzati, il progetto aggiunge automaticamente wwwroot \ css e wwwroot \ js, quindi se hai aggiunto un singolo file (come wwwroot \ css \ custom-bootstrap-navbar.css) verrà conteggiato come duplicato.


Questo <Folder Include="wwwroot\" />funziona per me, ma lo studio visivo lo annulla più tardi :(
Jaider

3
Ok, quindi non capisco. Cosa diavolo sta facendo Visual Studio e perché?
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
In questo modo ho risolto il problema per me, ma cosa è realmente successo per farlo funzionare?
Rono,

@Rono Sembra che identifichi esplicitamente tutti i file nel tuo file wwwroot nel file .csproj. ad es .: i.imgur.com/4SPnQ5h.png
J. Schei

4
Ha funzionato anche per me - e un modo molto più sicuro di procedere secondo me rispetto alla risposta accettata.
Brinch

Ha funzionato anche per me! La disabilitazione di DefaultContentItems mi ha aiutato a creare la mia soluzione, ma immagini, CSS e altri file non venivano visualizzati.
Bruno Serrano,

1
Una volta escluso "wwwroot", potrebbe essere necessario fare clic sul pulsante "Mostra tutti i file" (che assomiglia a 3 fogli di carta impilati in modo disordinato) nella parte superiore di Esplora soluzioni per visualizzare la cartella "wwwroot" in modo da poterla aggiungere nuovamente Il mio è scomparso e non sapevo come riaverlo finché non ho trovato questo pulsante. La cartella apparirà in grigio per indicare che non è inclusa.
James Toomey,

25

Questo ha funzionato nel mio caso:

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

3
Come indicato nel mio commento alla risposta di Pinki, non lo proporrei come soluzione in quanto ciò potrebbe portare a più errori.
Matt,

In realtà ho riscontrato grossi problemi impostando questa opzione su false. Consiglierei anche di non impostarlo su false.
Rwiti,

Qual è il modo più pulito per includere una cartella come elementi EmbeddedResource?
John Zabroski,

Dopo questo wwwroot non è stato più incluso. Quindi meglio non usare questo ...
Mai

14

Succede quando aggiorno il mio progetto da .NET Core 1.X a 2.0 proprio ora. Ecco la mia soluzione

  • Apri xxx.csproj o fai clic con il pulsante destro del mouse sul progetto
  • Scarica progetto
  • Modifica xxx.csproj.

Quindi rimuovere gli elementi ItemGroup iniziano con <Content Include = "wwwroot\xxxxx"


Grazie! Nota: sembra essere correlato all'ultima versione di Visual Studio 15.3, non direttamente a .NET Core 2.0
Vincent V.

10

I miei problemi erano vicini ma non identici. Il mio errore è stato questo:

C: \ Programmi \ dotnet \ sdk \ 2.0.0-preview2-006497 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.NET.Sdk.DefaultItems.targets (285,5): errore: elementi 'Content' duplicati erano inclusi. .NET SDK include gli elementi "Contenuto" dalla directory del progetto per impostazione predefinita. È possibile rimuovere questi elementi dal file di progetto o impostare la proprietà "EnableDefaultContentItems" su "false" se si desidera includerli esplicitamente nel file di progetto. Per ulteriori informazioni, consultare https://aka.ms/sdkimplicititems . Gli elementi duplicati erano: '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.

Se lo facessi:

<EnableDefaultContentItems>false</EnableDefaultContentItems>

Non si sarebbe compilato perché all'improvviso Areasnon sarebbe stato riconosciuto.

La mia soluzione sembra strana, ma il messaggio mi dice che c'erano file duplicati:

Gli elementi duplicati erano: 'wwwroot \ js \ KOBindings.js'; 'Wwwroot \ js \ KOPleaseWait.js'; 'Wwwroot \ js \ ProjectTime \ Add.js'; 'Wwwroot \ js \ TimeAdmin \ Invoice.js'; 'Wwwroot \ js \ TimeAdmin \ PayPeriodTotals.js'

Guardando il mio .csprojfile:

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

Questa era l'UNICA posizione all'interno dell'intero progetto in cui questi file erano riferimenti (a parte il punto in cui erano stati caricati). Quindi la frase duplicata non ha alcun senso per me. Tuttavia, commentando quei file come tali, si è preso cura del mio problema:

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

Presumo che questo abbia qualcosa a che fare con quello 2.0.0-preview2-006497che ho installato di recente.

Inoltre, questo link menziona i discorsi sui globs. Ma non mi dice dove sia. Parla di SDK e simili. Eppure la risposta era i miei .jsfile personalizzati . Tale collegamento deve essere aggiornato o espanso su IMHO. Spero che questo aiuti qualcuno.


Mi piacerebbe sapere perché funziona. Tuttavia, ha funzionato per me. =)
Frog Pr1nce

10

Come dice il link , puoi disabilitare questo comportamento (inclusione automatica) e includere esplicitamente tutto il contenuto aggiungendolo nel tuo csprojfile:

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

1
Quando lo aggiungo al mio file csproj e rimuovo il itemgroup css / js, ottengo il seguente errore: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
"Contenuto" non "Compila" - Non è vero?
Harveyt

Una nota a
margine

Ci ho provato ma non ha funzionato. continua a
riscontrare

3

Nel mio caso, ho risolto questo eliminando tutti i file dalla directory wwwroot in VS. Scarica e ricarica il progetto. Copia di nuovo tutti i file con VS. Fatto


Nessuna delle migliori soluzioni ha funzionato per me, l'ho fatto prima di leggere il tuo commento e funziona perfettamente !!! Ho escluso wwwroot, controller, viste cartelle e le ho aggiunte di nuovo e ora tutto funziona bene!
revobtz,

2

In realtà, il core Asp.net include automaticamente i contenuti di wwwroot\css\ , wwwroot\js\e wwwroot\lib\la posizione, quindi nonostante questo se il vostro csprojfile di includere esplicitamente il contenuto di tali cartelle poi quelli contenuti sarà duplicato in modo da rimuovere i contenuti da voi csprojfile è il modo migliore per sbarazzarsi di questo errore. Quindi rimuovi il contenuto sottostante-

  <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
Questo mi è successo durante l'aggiornamento di Visual Studio alla 15.3. Per evitare di rompere le modifiche ai miei colleghi che non hanno ancora effettuato l'aggiornamento, ho dovuto aggiungere <PropertyGroup> <EnableDefaultContentItems>false</EnableDefaultContentItems> </PropertyGroup>il file .csproj.
Saluce,

@saluce sì hai ragione, la stessa soluzione che puoi usare anche nel tuo contesto. la scelta si basa sullo sviluppatore se desidera mantenere EnableDefaultContentItemso meno. Sono due approcci diversi
Mostafiz il

Il mio punto era che l'unica modifica che ho apportato è stata l'aggiornamento di Visual Studio alla 15.3. Non ho apportato modifiche al mio progetto, ma prima dell'aggiornamento questa impostazione non era richiesta.
Saluce,

2

Il mio caso I è disabilitare entrambi gli elementi predefiniti di seguito.

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

1

Non che io possa vederlo nel tuo esempio sopra, per aiutare altri ricercatori SO.

Puoi anche ottenere questo errore quando hai lo stesso file elencato due volte negli <Content Include="xxx" />elementi nel tuocsproj file.

Rimuovere il duplicato e ricostruire.


1

In Visual Studio 2017 15.3, con .NET Core 2.0, EnableDefaultCompileItems non ha funzionato per me.

Ho dovuto aggiungere questo al mio .csproj

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

Per me (Visual Studio 15.3.4 .NET framework 4.5.2) EnableDefaultContentItems non ha funzionato mentre EnableDefaultCompileItems ha funzionato.
hlovdal,

1

Ho trovato una soluzione corretta diversa.

  1. Fare clic con il tasto destro sul progetto mvc e fare clic su Modifica csproj.
  2. Se stai aggiungendo file in wwwroot, spostali in una cartella in wwwroot, diciamo "tema"

Ed elimina tutti i tag di contenuto nel file csproj se esiste, un esempio;

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

E aggiungi solo questo;

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

Quindi, il file csproj dovrebbe essere simile a questo;

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

In questo modo, penso che stai aggiungendo tutti i file nella cartella del tema. Quindi non includerli uno per uno che si verificano alcuni errori.


1

Progetti di base .NET

Se ti trovi in ​​una libreria di classi, probabilmente dovrai rimuovere tutti gli elementi Compile / Content dal tuo csproj in quanto questi sono inclusi automaticamente.

<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

Escludendo e includendo indietro le cartelle con errori duplicati ha funzionato per me! Spero che questo aiuti qualcun altro!


0

Penso che disabilitare l'opzione "EnableDefaultContentItems" non sia l'opzione migliore. Manualecs-Proj modifica file non è affatto una buona idea.

Quindi, per la nostra pipeline di build server, abbiamo scritto uno strumento molto piccolo che rimuoverà automaticamente tutte le voci duplicate: dotnet-csproj-cleaner

Lo eseguiamo sotto Docker come primo passo di costruzione nella nostra pipeline di integrazione continua.


Sembra bello, ma perché è limitato ai progetti con un percorso wwwroot?
John Zabroski,

È la posizione del contenuto VS standard e il percorso è incluso per impostazione predefinita. Se hai bisogno di una soluzione più complessa, non esitare a inviare una richiesta pull. Dovrebbe essere molto semplice aggiungendo ulteriori argomenti da riga di comando. Grazie.
anakod,

0

Ho avuto lo stesso problema con solo un file e tutti gli altri funzionavano (tutti i miei modelli erano archiviati direttamente in wwwroot / content). Il progetto non è stato creato da me, quindi non conosco molti dettagli.

Il problema è stato risolto rinominando avanti e indietro il file con il problema:

MyTemplate.html - rinominato -> MyTemplate2.html - rinominato -> MyTemplate.html

Nota : alla prima ridenominazione ho riscontrato un errore con qualcosa del tipo " Configurazione del contenuto non trovata ", ma la seconda ridenominazione ha funzionato senza problemi.

Dopo questo sono stato in grado di compilare il progetto con successo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.