Des éléments «Contenu» en double ont été inclus. Le Kit de développement logiciel (SDK) .NET inclut par défaut les éléments "Contenu" du répertoire de votre projet

132

Chaque fois que j'ajoute un fichier javascript ou css à mon projet principal asp.net et que j'exécute dotnet rundans mon terminal bash, j'obtiens l'erreur suivante:

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

.NET.Sdk.DefaultItems.targets (188,5): erreur: des éléments "Contenu" en double ont été inclus. Le Kit de développement logiciel (SDK) .NET inclut par défaut les éléments «Contenu» de votre répertoire de projet. Vous pouvez soit supprimer ces éléments de votre fichier projet, soit définir la propriété «EnableDefaultContentItems» sur «false» si vous souhaitez les inclure explicitement dans votre fichier projet. Pour plus d'informations, consultez https://aka.ms/sdkimplicititems . Les éléments en double étaient: 'wwwroot / css / BasicQuotation.css'; 'wwwroot / js / BasicQuotation.js' [/mnt/c/Dev/myproject/MyProject/MyProject.csproj]

La construction a échoué. Veuillez corriger les erreurs de construction et réexécuter.

Je peux résoudre ce problème en supprimant le ItemGroupde mon fichier csproj, mais je ne pense pas que ce soit très productif.

Cela se produit dans le modèle d'application Web ASP.NET Core (.NET Core) Visual Studio 2017 par défaut. J'ajoute les fichiers à mon projet en faisant un clic droit sur le dossier wwwroot> js puis en sélectionnantAdd > New Item > JavaScript File

Voici mon fichier .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>
jao
la source
13
Si vous rencontrez ce problème après la mise à jour de VS2017 vers la v15.3, assurez-vous de jeter un œil ici . MS a décidé d'inclure certains dossiers tels que wwwroot par défaut maintenant, ce qui signifie qu'ils sont probablement inclus deux fois.
jao
L'article que @jao a partagé explique très bien pourquoi cela se produit et comment y remédier. Allez directement à cet article.
Pepito Fernandez

Réponses:

107

J'ai donc rencontré le même problème. Je ne voulais pas désactiver DefaultCompileItems parce que je savais que cela ne "résoudrait" pas le problème. J'ai donc déchargé mon projet et ouvert le fichier .csproj en mode texte dans Visual Studio et j'ai vu cela.

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

Quand j'ai commenté le premier bloc ItemGroup, cela a fonctionné. Ce que je suppose, c'est que le projet ajoute le dossier entier \ images \ friends-eating \ puis ajoute chaque image individuelle, provoquant une duplication.

En ce qui concerne les css et js personnalisés, le projet ajoute automatiquement wwwroot \ css et wwwroot \ js, donc si vous avez un fichier individuel ajouté (comme wwwroot \ css \ custom-bootstrap-navbar.css), il comptera comme un doublon.

Pinski
la source
Cela <Folder Include="wwwroot\" />fonctionne pour moi, mais Visual Studio annule cela plus tard :(
Jaider
3
Ok donc je ne comprends pas. Que diable fait réellement le studio visuel et pourquoi?
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
la source
3
Faire cela a résolu le problème pour moi, mais que s'est-il réellement passé pour que cela fonctionne?
Rono
@Rono On dirait qu'il identifie explicitement tous les fichiers de votre fichier wwwroot dans le fichier .csproj. par exemple: i.imgur.com/4SPnQ5h.png
J. Schei
4
Cela a également fonctionné pour moi - et un moyen beaucoup plus sûr à mon avis que la réponse acceptée.
brinch
Il a travaillé pour moi aussi! La désactivation de DefaultContentItems a aidé à construire ma solution, mais les images, CSS et autres fichiers ne s'affichent pas.
Bruno Serrano le
1
Une fois que vous avez exclu "wwwroot", vous devrez peut-être cliquer sur le bouton "Afficher tous les fichiers" (qui ressemble à 3 feuilles de papier empilées de manière désordonnée) en haut de l'Explorateur de solutions pour voir le dossier "wwwroot" afin de pouvoir le rajouter Le mien a disparu et je ne savais pas comment le récupérer avant de trouver ce bouton. Le dossier apparaîtra grisé pour indiquer qu'il n'est pas inclus.
James Toomey
25

Cela a fonctionné dans mon cas:

 <PropertyGroup>
    ...
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
  </PropertyGroup>
Harveyt
la source
3
Comme indiqué dans mon commentaire à la réponse de Pinki, je ne proposerais pas cela comme solution car cela pourrait conduire à plus d'erreurs.
Matt
En fait, j'ai rencontré de plus gros problèmes en définissant cette option sur false. Je recommanderais également de ne pas le définir sur false.
Rwiti
Quel est le moyen le plus propre de faire en sorte qu'un dossier soit entièrement inclus en tant qu'éléments EmbeddedResource?
John Zabroski
Après cela, wwwroot n'a plus été inclus. Alors mieux vaut ne pas utiliser ça ...
UNeverNo
14

Cela s'est produit lorsque j'ai mis à niveau mon projet de .NET Core 1.X vers 2.0 tout à l'heure. Voici ma solution.

  • Ouvrez xxx.csproj ou cliquez avec le bouton droit sur le projet
  • Décharger le projet
  • Modifiez xxx.csproj.

Ensuite, supprimez les éléments ItemGroup commençant par <Content Include = "wwwroot\xxxxx"

wtf512
la source
Merci! Remarque: il semble être lié à la dernière version de Visual Studio 15.3, pas directement à .NET Core 2.0
Vincent V.
10

Mes problèmes étaient proches mais pas exactement les mêmes. Mon erreur était la suivante:

C: \ Program Files \ dotnet \ sdk \ 2.0.0-preview2-006497 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.NET.Sdk.DefaultItems.targets (285,5): erreur: éléments 'Content' en double ont été incluses. Le Kit de développement logiciel (SDK) .NET inclut par défaut les éléments «Contenu» de votre répertoire de projet. Vous pouvez soit supprimer ces éléments de votre fichier projet, soit définir la propriété «EnableDefaultContentItems» sur «false» si vous souhaitez les inclure explicitement dans votre fichier projet. Pour plus d'informations, consultez https://aka.ms/sdkimplicititems . Les éléments en double étaient: '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.

Si j'ai fait ça:

<EnableDefaultContentItems>false</EnableDefaultContentItems>

Il ne serait pas compilé car tout d'un coup, Areasil ne serait pas reconnu.

Ma solution, semble étrange, mais le message me le dit, il y avait des fichiers en double:

Les éléments en double étaient: 'wwwroot \ js \ KOBindings.js'; 'wwwroot \ js \ KOPleaseWait.js'; 'wwwroot \ js \ ProjectTime \ Add.js'; 'wwwroot \ js \ TimeAdmin \ Invoice.js'; 'wwwroot \ js \ TimeAdmin \ PayPeriodTotals.js'

En regardant mon .csprojdossier:

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

C'était le SEUL emplacement dans l'ensemble du projet où ces fichiers étaient des références (en dehors de l'endroit où ils ont été chargés.) Donc, la phrase duplicate n'a aucun sens pour moi. Cependant, commenter ces fichiers en tant que tels, a résolu mon problème:

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

Je suppose que cela a quelque chose à voir avec le 2.0.0-preview2-006497que j'ai récemment installé.

En outre, ce lien mentionne des discussions sur les globs. Mais ne me dit pas où c'est. Il parle de SDK et autres. Pourtant, la réponse était mes .jsfichiers personnalisés . Ce lien doit être mis à jour ou développé sur IMHO. J'espère que cela aide quelqu'un.

Grandizer
la source
J'adorerais savoir pourquoi cela fonctionne. Cependant, juste travaillé pour moi. =)
Frog Pr1nce
10

Comme le lien l'indique , vous pouvez désactiver ce comportement (inclusion automatique) et inclure explicitement tout le contenu en l'ajoutant à votre csprojfichier:

<PropertyGroup>
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
</PropertyGroup>
Dmitry
la source
1
Lorsque j'ajoute cela à mon fichier csproj et que je supprime le groupe d'éléments css / js, j'obtiens l'erreur suivante: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
"Contenu" et non "Compiler" - N'est-ce pas?
harveyt
Remarque: si vous n'incluez pas explicitement votre dossier Views, il ne publiera pas vos vues avec ce paramètre
salue
J'ai essayé cela mais cela n'a pas fonctionné. toujours la même erreur
pantonis
3

Dans mon cas, j'ai résolu ce problème en supprimant tous les fichiers du wwwroot-Directory dans VS. Déchargez et rechargez le projet. Copiez tous les fichiers avec VS. Terminé

Alex Freund
la source
Aucune des meilleures solutions n'a fonctionné pour moi. Je l'ai fait avant de lire votre commentaire et cela fonctionne parfaitement !!! J'ai exclu le wwwroot, les contrôleurs, les dossiers de vues et les ai rajoutés et maintenant tout fonctionne bien!
revobtz
2

En fait, le noyau Asp.net inclut automatiquement le contenu de wwwroot\css\, wwwroot\js\et l' wwwroot\lib\emplacement, donc malgré cela si votre csprojfichier inclut explicitement le contenu de ces répertoires alors ceux contenus sera dupliqué afin suppression de contenu vous csprojfichier est le meilleur moyen de se débarrasser de cette erreur. Alors supprimez le contenu ci-dessous-

  <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
la source
1
Cela m'est arrivé lors de la mise à jour de Visual Studio vers 15.3. Pour éviter de briser les changements à mes collègues qui n'ont pas encore mis à jour, j'ai dû ajouter <PropertyGroup> <EnableDefaultContentItems>false</EnableDefaultContentItems> </PropertyGroup>au fichier .csproj.
saluce
@saluce oui vous avez raison, la même solution que vous pouvez utiliser dans votre contexte aussi. le choix est basé sur le développeur s'il souhaite conserver EnableDefaultContentItemsou non. Ils sont deux approches différentes
Mostafiz
Mon point était que le seul changement que j'ai apporté était la mise à niveau de Visual Studio vers 15.3. Je n'ai apporté aucune modification à mon projet, mais avant la mise à niveau, ce paramètre n'était pas obligatoire.
saluce
2

Mon cas, je désactive les deux éléments ci-dessous par défaut.

<EnableDefaultContentItems>false</EnableDefaultContentItems>
<EnableDefaultItems>false</EnableDefaultItems>
Duy Hoang
la source
1

Non pas que je puisse le voir dans votre exemple ci-dessus, pour aider d'autres chercheurs SO ..

Vous pouvez également obtenir cette erreur lorsque le même fichier est répertorié deux fois dans les <Content Include="xxx" />éléments de votrecsproj fichier.

Supprimez le duplicata et reconstruisez.

Sam
la source
1

Sous Visual Studio 2017 15.3, avec .NET Core 2.0, EnableDefaultCompileItems ne fonctionnait pas pour moi.

J'avais besoin d'ajouter ceci à mon .csproj

  <PropertyGroup>
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
  </PropertyGroup>
Kyriacos
la source
Pour moi (Visual Studio 15.3.4 .NET Framework 4.5.2) EnableDefaultContentItems ne fonctionnait pas alors que EnableDefaultCompileItems le faisait.
hlovdal
1

J'ai trouvé une solution différente.

  1. Cliquez avec le bouton droit sur votre projet mvc et cliquez sur Modifier csproj.
  2. Si vous ajoutez des fichiers sous wwwroot, déplacez-les simplement dans un dossier sous wwwroot, disons "thème"

Et supprimez toutes les balises de contenu dans le fichier csproj si elles existent, un exemple;

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

Et ajoutez seulement ceci;

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

Ainsi, le fichier csproj devrait ressembler à ceci;

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

De cette façon, je pense que vous ajoutez tous les fichiers sous le dossier de thème. Ne les incluez donc pas un par un, ce qui entraîne des erreurs.

Lost_In_Library
la source
1

Projets .NET Core

Si vous êtes dans une bibliothèque de classes, vous devrez probablement supprimer tous les éléments Compile / Content de votre csproj car ils sont inclus automatiquement.

<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
la source
0

L'exclusion et l'inclusion des dossiers contenant des doublons ont fonctionné pour moi! J'espère que ceci aide quelqu'un d'autre!

revobtz
la source
0

Je pense que la désactivation de "EnableDefaultContentItems" n'est pas la meilleure option. L' cs-Projédition manuelle des fichiers n'est pas du tout la bonne idée.

Donc, pour notre pipeline de serveur de construction, nous avons écrit un très petit outil qui supprimera automatiquement toutes les entrées dupliquées: dotnet-csproj-cleaner

Nous l'exécutons sous Docker comme première étape de construction de notre pipeline d'intégration continue.

anakod
la source
Cela semble bien mais pourquoi est-il limité aux projets avec un chemin wwwroot?
John Zabroski
C'est l'emplacement du contenu VS standard et son chemin est inclus par défaut. Si vous avez besoin d'une solution plus complexe, n'hésitez pas à soumettre une demande d'extraction. Cela devrait être très simple en ajoutant des arguments de ligne de commande supplémentaires. Je vous remercie.
anakod
0

J'ai eu le même problème avec seulement un fichier, et tous les autres fonctionnaient (tous mes modèles étaient stockés directement dans wwwroot / content). Le projet n'a pas été créé par moi donc je ne connais pas beaucoup de détails.

Le problème a été résolu en renommant le fichier avec le problème:

MyTemplate.html - renommé -> MyTemplate2.html - renommé -> MyTemplate.html

Remarque : Lors du premier changement de nom, j'ai eu une erreur avec quelque chose du genre " configuration du contenu introuvable ", mais le deuxième changement de nom a fonctionné sans problème.

Après cela, j'ai pu compiler le projet avec succès.

Razvan
la source