Doppelte 'Content'-Elemente wurden aufgenommen. Das .NET SDK enthält standardmäßig 'Content'-Elemente aus Ihrem Projektverzeichnis

132

Immer wenn ich meinem asp.net-Kernprojekt eine Javascript- oder CSS-Datei hinzufüge und sie dotnet runin meinem Bash-Terminal ausführe , wird folgende Fehlermeldung angezeigt :

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

.NET.Sdk.DefaultItems.targets (188,5): Fehler: Doppelte 'Content'-Elemente wurden eingeschlossen. Das .NET SDK enthält standardmäßig 'Content'-Elemente aus Ihrem Projektverzeichnis. Sie können diese Elemente entweder aus Ihrer Projektdatei entfernen oder die Eigenschaft 'EnableDefaultContentItems' auf 'false' setzen, wenn Sie sie explizit in Ihre Projektdatei aufnehmen möchten. Weitere Informationen finden Sie unter https://aka.ms/sdkimplicititems . Die doppelten Elemente waren: 'wwwroot / css / BasicQuotation.css'; 'wwwroot / js / BasicQuotation.js' [/mnt/c/Dev/myproject/MyProject/MyProject.csproj]

Der Build ist fehlgeschlagen. Bitte beheben Sie die Build-Fehler und führen Sie sie erneut aus.

Ich kann das beheben, indem ich das ItemGroupaus meiner csproj-Datei entferne, aber ich denke nicht, dass das sehr produktiv ist.

Dies geschieht in der Standardvorlage für Visual Studio 2017 ASP.NET Core-Webanwendungen (.NET Core). Ich füge die Dateien meinem Projekt hinzu, indem ich mit der rechten Maustaste auf den Ordner wwwroot> js klicke und dann auswähleAdd > New Item > JavaScript File

Dies ist meine .csproj-Datei:

<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
quelle
13
Wenn Sie nach dem Update von VS2017 auf v15.3 auf dieses Problem stoßen, sehen Sie hier nach . MS hat beschlossen, bestimmte Ordner wie wwwroot jetzt standardmäßig einzuschließen, was bedeutet, dass sie wahrscheinlich zweimal enthalten sind.
Jao
Der Artikel, den @jao geteilt hat, erklärt sehr gut, warum dies passiert und wie man es behebt. Gehen Sie einfach direkt zu diesem Artikel.
Pepito Fernandez

Antworten:

107

Also bin ich auf dasselbe Problem gestoßen. Ich wollte DefaultCompileItems nicht deaktivieren, weil ich wusste, dass dies das Problem nicht "beheben" würde. Also habe ich mein Projekt entladen und die .csproj-Datei im Textmodus in Visual Studio geöffnet und dies gesehen.

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

Als ich den ersten ItemGroup-Block auskommentierte, funktionierte es. Ich gehe davon aus, dass das Projekt den gesamten Ordner \ images \ friends-eating \ und dann jedes einzelne Bild hinzufügt, was zu einer Duplizierung führt.

In Bezug auf das benutzerdefinierte CSS und JS fügt das Projekt automatisch wwwroot \ css und wwwroot \ js hinzu. Wenn Sie also eine einzelne Datei hinzugefügt haben (wie wwwroot \ css \ custom-bootstrap-navbar.css), wird diese als Duplikat gezählt.

Pinski
quelle
Dies <Folder Include="wwwroot\" />funktioniert für mich, aber Visual Studio macht das später rückgängig :(
Jaider
3
Ok, ich verstehe es nicht. Was zum Teufel macht Visual Studio eigentlich und warum?
tnk479
193
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
quelle
3
Dadurch wurde das Problem für mich gelöst, aber was ist tatsächlich passiert, damit es funktioniert?
Rono
@Rono Sieht so aus, als würde es explizit alle Dateien in Ihrer wwwroot-Datei in der .csproj-Datei identifizieren. Beispiel: i.imgur.com/4SPnQ5h.png
J. Schei
4
Hat auch für mich funktioniert - und meiner Meinung nach ein weitaus sichererer Weg als die akzeptierte Antwort.
Brinch
Es hat auch bei mir funktioniert! Das Deaktivieren von DefaultContentItems half beim Erstellen meiner Lösung, aber Bilder, CSSs und andere Dateien wurden nicht angezeigt.
Bruno Serrano
1
Wenn Sie "wwwroot" ausschließen, müssen Sie möglicherweise oben im Projektmappen-Explorer auf die Schaltfläche "Alle Dateien anzeigen" (die wie 3 unordentlich gestapelte Blätter Papier aussieht) klicken, um den Ordner "wwwroot" anzuzeigen und ihn wieder hinzuzufügen Meins verschwand und ich wusste nicht, wie ich es zurückbekommen sollte, bis ich diesen Knopf fand. Der Ordner wird ausgegraut angezeigt, um anzuzeigen, dass er nicht enthalten ist.
James Toomey
25

Das hat in meinem Fall funktioniert:

 <PropertyGroup>
    ...
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
  </PropertyGroup>
Harveyt
quelle
3
Wie in meinem Kommentar zu Pinkis Antwort angegeben, würde ich dies nicht als Lösung vorschlagen, da dies zu weiteren Fehlern führen könnte.
Matt
Ich hatte tatsächlich größere Probleme, diese Option auf false zu setzen. Ich würde auch empfehlen, es nicht auf false zu setzen.
Rwiti
Was ist der sauberste Weg, um einen Ordner vollständig als EmbeddedResource-Elemente aufzunehmen?
John Zabroski
Danach war wwwroot nicht mehr enthalten. Also besser nicht benutzen ...
UNeverNo
14

Es passierte, als ich mein Projekt gerade von .NET Core 1.X auf 2.0 aktualisierte. Hier ist meine Lösung.

  • Öffnen Sie xxx.csproj oder klicken Sie mit der rechten Maustaste auf Projekt
  • Projekt entladen
  • Bearbeiten Sie xxx.csproj.

Entfernen Sie dann ItemGroup-Elemente, die mit beginnen <Content Include = "wwwroot\xxxxx"

wtf512
quelle
Vielen Dank! Hinweis: Es scheint mit der neuesten Visual Studio-Version 15.3 verwandt zu sein, nicht direkt mit .NET Core 2.0
Vincent V.
10

Meine Probleme waren eng, aber nicht genau gleich. Mein Fehler war folgender:

C: \ Programme \ dotnet \ sdk \ 2.0.0-Vorschau2-006497 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.NET.Sdk.DefaultItems.targets (285,5): Fehler: Doppelte "Inhalts" -Elemente waren enthalten. Das .NET SDK enthält standardmäßig 'Content'-Elemente aus Ihrem Projektverzeichnis. Sie können diese Elemente entweder aus Ihrer Projektdatei entfernen oder die Eigenschaft 'EnableDefaultContentItems' auf 'false' setzen, wenn Sie sie explizit in Ihre Projektdatei aufnehmen möchten. Weitere Informationen finden Sie unter https://aka.ms/sdkimplicititems . Die doppelten Elemente waren: '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-Projekte \ Zeitkarte \ Avantia-Arbeitszeittabelle \ Lösung \ Almanach \ Almanach.

Wenn ich das getan hätte:

<EnableDefaultContentItems>false</EnableDefaultContentItems>

Es würde nicht kompiliert werden, da plötzlich Areasnicht mehr erkannt würde.

Meine Lösung scheint seltsam, aber die Nachricht sagt mir, dass es doppelte Dateien gab:

Die doppelten Elemente waren: 'wwwroot \ js \ KOBindings.js'; 'wwwroot \ js \ KOPleaseWait.js'; 'wwwroot \ js \ ProjectTime \ Add.js'; 'wwwroot \ js \ TimeAdmin \ Invoice.js'; 'wwwroot \ js \ TimeAdmin \ PayPeriodTotals.js'

Blick auf meine .csprojAkte:

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

Dies war der EINZIGE Ort innerhalb des gesamten Projekts, an dem diese Dateien Verweise waren (abgesehen davon, wo sie geladen wurden). Daher macht das Duplikat der Phrase für mich keinen Sinn. Das Auskommentieren dieser Dateien als solche hat sich jedoch um mein Problem gekümmert:

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

Ich gehe davon aus, dass dies etwas mit dem zu tun hat, was 2.0.0-preview2-006497ich kürzlich installiert habe.

In diesem Link werden auch Gespräche über Globs erwähnt. Aber sagt mir nicht wo das ist. Es geht um SDKs und so. Die Antwort waren jedoch meine benutzerdefinierten .jsDateien. Dieser Link muss IMHO aktualisiert oder erweitert werden. Hoffe das hilft jemandem.

Grandizer
quelle
Würde gerne wissen, warum das funktioniert. Hat aber nur für mich gearbeitet. =)
Frosch Pr1nce
10

Wie der Link sagt , können Sie dieses Verhalten deaktivieren (automatisch einschließen) und den gesamten Inhalt explizit einschließen, indem Sie dies in Ihre csprojDatei einfügen:

<PropertyGroup>
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
</PropertyGroup>
Dmitry
quelle
1
Wenn ich das zu meiner csproj-Datei hinzufüge und die css / js-Elementgruppe entferne, erhalte ich die folgende Fehlermeldung: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
"Inhalt" nicht "Kompilieren" - nicht wahr?
Harvey
Eine Randnotiz ... Wenn Sie Ihren Ansichtsordner nicht explizit einschließen, werden Ihre Ansichten mit dieser Einstellung nicht veröffentlicht
saluce
Ich habe es versucht, aber es hat nicht funktioniert. immer noch den gleichen Fehler
pantonis
3

In meinem Fall habe ich dies gelöst, indem ich alle Dateien aus dem wwwroot-Verzeichnis in VS gelöscht habe. Entladen Sie das Projekt und laden Sie es erneut. Kopieren Sie alle Dateien wieder mit VS. Getan

Alex Freund
quelle
Keine der Top-Lösungen hat bei mir funktioniert. Ich habe dies getan, bevor ich Ihren Kommentar gelesen habe, und das funktioniert einwandfrei !!! Ich habe die Ordner wwwroot, controller, views ausgeschlossen und wieder hinzugefügt, und jetzt funktioniert alles einwandfrei!
Revobtz
2

Eigentlich sind Asp.net Kern automatisch Inhalte aus wwwroot\css\, wwwroot\js\und wwwroot\lib\Lage, so trotzdem , wenn Ihre csprojDatei explizit enthalten Inhalte aus diesen Verzeichnissen dann werden diejenigen Inhalt dupliziert werden , so Entfernen von Inhalten von Ihnen csprojDatei der bessere Weg ist dieser Fehler loszuwerden. Also entferne unten den Inhalt-

  <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
quelle
1
Dies ist mir beim Aktualisieren von Visual Studio auf 15.3 passiert. Um zu verhindern, dass Änderungen an meinen Kollegen vorgenommen werden, die noch nicht aktualisiert wurden, musste ich sie zur <PropertyGroup> <EnableDefaultContentItems>false</EnableDefaultContentItems> </PropertyGroup>.csproj-Datei hinzufügen .
Salue
@saluce ja du hast recht, die gleiche lösung kannst du auch in deinem kontext verwenden. Die Wahl hängt vom Entwickler ab, ob er behalten möchte EnableDefaultContentItemsoder nicht. Sie sind zwei verschiedene Ansatz
Mostafiz
Mein Punkt war, dass die einzige Änderung, die ich vorgenommen habe, das Upgrade von Visual Studio auf 15.3 war. Ich habe keine Änderungen an meinem Projekt vorgenommen, aber vor dem Upgrade war diese Einstellung nicht erforderlich.
Salue
2

In meinem Fall deaktiviere ich beide unter den Standardelementen.

<EnableDefaultContentItems>false</EnableDefaultContentItems>
<EnableDefaultItems>false</EnableDefaultItems>
Duy Hoang
quelle
1

Nicht, dass ich es in Ihrem obigen Beispiel sehen könnte, um anderen SO-Suchern zu helfen.

Sie können diesen Fehler auch erhalten, wenn dieselbe Datei zweimal in <Content Include="xxx" />Elementen in Ihrer csprojDatei aufgeführt ist.

Entfernen Sie das Duplikat und erstellen Sie es neu.

Sam
quelle
1

Unter Visual Studio 2017 15.3 mit .NET Core 2.0 funktionierte EnableDefaultCompileItems für mich nicht.

Ich musste dies zu meiner .csproj hinzufügen

  <PropertyGroup>
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
  </PropertyGroup>
Kyriacos
quelle
Für mich (Visual Studio 15.3.4 .NET Framework 4.5.2) funktionierte EnableDefaultContentItems nicht, während EnableDefaultCompileItems dies tat.
Hlovdal
1

Ich habe eine andere richtige Lösung gefunden.

  1. Klicken Sie mit der rechten Maustaste auf Ihr MVC-Projekt und klicken Sie auf Csproj bearbeiten.
  2. Wenn Sie Dateien unter wwwroot hinzufügen, verschieben Sie sie einfach in einen Ordner unter wwwroot. Sagen wir "Thema".

Und löschen Sie alle Inhalts-Tags in der csproj-Datei, falls vorhanden, ein Beispiel.

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

Und füge nur dies hinzu;

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

Die csproj-Datei sollte also so aussehen.

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

Auf diese Weise fügen Sie meiner Meinung nach alle Dateien unter dem Themenordner hinzu. Schließen Sie sie also nicht einzeln ein, was zu Fehlern führt.

Lost_In_Library
quelle
1

.NET-Kernprojekte

Wenn Sie sich in einer Klassenbibliothek befinden, müssen Sie wahrscheinlich alle Kompilierungs- / Inhaltselemente aus Ihrem csproj entfernen, da diese automatisch enthalten sind.

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

Das Ausschließen und Zurückschließen der Ordner mit doppelten Fehlern hat bei mir funktioniert! Hoffe das hilft jemand anderem!

revobtz
quelle
0

Ich denke, dass das Deaktivieren von "EnableDefaultContentItems" nicht die beste Option ist. Manuelle cs-ProjDateibearbeitung ist auch überhaupt nicht die gute Idee.

Für unsere Build-Server-Pipeline haben wir ein sehr kleines Tool geschrieben , mit dem alle doppelten Einträge automatisch entfernt werden: dotnet-csproj-cleanner

Wir führen es unter Docker als ersten Build-Schritt in unserer Pipeline für die kontinuierliche Integration aus.

Anakod
quelle
Scheint schön, aber warum ist es auf Projekte mit einem wwwroot-Pfad beschränkt?
John Zabroski
Es ist der Standardspeicherort für VS-Inhalte und der Pfad ist standardmäßig enthalten. Wenn Sie eine komplexere Lösung benötigen, können Sie eine Pull-Anfrage einreichen. Das Hinzufügen zusätzlicher Befehlszeilenargumente sollte sehr einfach sein. Danke dir.
Anakod
0

Ich hatte das gleiche Problem nur mit einer Datei und alle anderen funktionierten (alle meine Vorlagen wurden direkt in wwwroot / content gespeichert). Das Projekt wurde nicht von mir erstellt, daher kenne ich nicht viele Details.

Das Problem wurde behoben, indem die Datei mit dem Problem hin und her umbenannt wurde :

MyTemplate.html - umbenannt -> MyTemplate2.html - umbenannt -> MyTemplate.html

Hinweis : Beim ersten Umbenennen wurde ein Fehler mit dem Titel " Inhaltskonfiguration nicht gefunden " angezeigt, aber beim zweiten Umbenennen funktionierte dies ohne Probleme.

Danach konnte ich das Projekt erfolgreich kompilieren.

Razvan
quelle