Se incluyeron elementos duplicados de 'Contenido'. El SDK de .NET incluye elementos de 'Contenido' del directorio de su proyecto de manera predeterminada

132

Cada vez que agrego un archivo javascript o css a mi proyecto asp.net core y ejecuto dotnet runen mi terminal bash, aparece el siguiente error:

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

.NET.Sdk.DefaultItems.targets (188,5): error: se incluyeron elementos duplicados de 'Contenido'. El SDK de .NET incluye elementos de 'Contenido' del directorio de su proyecto de manera predeterminada. Puede eliminar estos elementos de su archivo de proyecto o establecer la propiedad 'EnableDefaultContentItems' en 'false' si desea incluirlos explícitamente en su archivo de proyecto. Para obtener más información, consulte https://aka.ms/sdkimplicititems . Los elementos duplicados fueron: 'wwwroot / css / BasicQuotation.css'; 'wwwroot / js / BasicQuotation.js' [/mnt/c/Dev/myproject/MyProject/MyProject.csproj]

La construcción falló. Por favor, corrija los errores de compilación y vuelva a ejecutar.

Puedo solucionarlo eliminando el ItemGrouparchivo csproj, pero no creo que sea muy productivo.

Esto sucede en la plantilla predeterminada de la aplicación web ASP.NET Core de Visual Studio 2017 (.NET Core). Agrego los archivos a mi proyecto haciendo clic derecho en la carpeta wwwroot> js y luego seleccionoAdd > New Item > JavaScript File

Este es mi archivo .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
fuente
13
Si tiene este problema después de actualizar VS2017 a v15.3, asegúrese de echar un vistazo aquí . MS decidió incluir ciertas carpetas como wwwroot por defecto ahora, lo que significa que probablemente se incluyan dos veces.
jao
El artículo que compartió @jao explica muy bien por qué sucede esto y cómo solucionarlo. Solo ve directamente a ese artículo.
Pepito Fernández el

Respuestas:

107

Entonces me encontré con este mismo problema. No quería desactivar DefaultCompileItems porque sabía que eso no "solucionaría" el problema. Así que descargué mi proyecto y abrí el archivo .csproj en modo de texto en Visual Studio y vi esto.

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

Cuando comenté el primer bloque de ItemGroup, funcionó. Lo que supongo que está sucediendo es que el proyecto agrega toda la carpeta \ images \ friends-eating \ y luego agrega cada imagen individual, causando una duplicación.

En cuanto a los css y js personalizados, el proyecto agrega automáticamente wwwroot \ css y wwwroot \ js, por lo que si tiene un archivo individual agregado (como wwwroot \ css \ custom-bootstrap-navbar.css) contará como un duplicado.

Pinski
fuente
Esto <Folder Include="wwwroot\" />funciona para mí, pero Visual Studio deshace eso más adelante :(
Jaider
3
Ok, entonces no lo entiendo. ¿Qué demonios está haciendo Visual Studio y por qué?
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
fuente
3
Hacer esto resolvió el problema para mí, pero ¿qué pasó realmente para que funcione?
Rono
@Rono Parece que identifica explícitamente todos los archivos en su archivo wwwroot en el archivo .csproj. por ejemplo: i.imgur.com/4SPnQ5h.png
J. Schei
44
También funcionó para mí, y en mi opinión, una forma mucho más segura de hacerlo que la respuesta aceptada.
brinch
¡También funcionó para mí! Deshabilitar DefaultContentItems me ayudó a construir mi solución, pero las imágenes, CSS y otros archivos no se mostraban.
Bruno Serrano
1
Una vez que excluya "wwwroot", es posible que tenga que hacer clic en el botón "Mostrar todos los archivos" (que parece 3 hojas de papel apiladas desordenadamente) en la parte superior del Explorador de soluciones para ver la carpeta "wwwroot" para que pueda volver a agregarla adentro. El mío desapareció y no supe cómo recuperarlo hasta que encontré este botón. La carpeta se verá atenuada para indicar que no está incluida.
James Toomey
25

Esto funcionó en mi caso:

 <PropertyGroup>
    ...
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
  </PropertyGroup>
Harveyt
fuente
3
Como se indicó en mi comentario a la respuesta de Pinki, no propondría esto como una solución, ya que esto podría conducir a más errores.
Matt
En realidad me encontré con problemas más grandes al configurar esta opción en falso. También recomendaría no establecerlo en falso.
Rwiti
¿Cuál es la forma más limpia de que una carpeta se incluya por completo como elementos EmbeddedResource?
John Zabroski
Después de esto, wwwroot ya no estaba incluido. Así que mejor no uses esto ...
menos
14

Sucedió cuando actualicé mi proyecto de .NET Core 1.X a 2.0 en este momento. Aquí está mi solución.

  • Abra xxx.csproj o haga clic con el botón derecho en el proyecto
  • Descargar proyecto
  • Edite xxx.csproj.

Luego, elimine los elementos de ItemGroup que comienzan con <Content Include = "wwwroot\xxxxx"

wtf512
fuente
¡Gracias! Nota: Parece estar relacionado con la última versión de Visual Studio 15.3, no directamente con .NET Core 2.0
Vincent V.
10

Mis problemas estaban cerca pero no exactamente lo mismo. Mi error fue este:

C: \ Archivos de programa \ dotnet \ sdk \ 2.0.0-preview2-006497 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.NET.Sdk.DefaultItems.targets (285,5): error: Duplicar elementos de 'Contenido' se incluyeron. El SDK de .NET incluye elementos de 'Contenido' del directorio de su proyecto de manera predeterminada. Puede eliminar estos elementos de su archivo de proyecto o establecer la propiedad 'EnableDefaultContentItems' en 'false' si desea incluirlos explícitamente en su archivo de proyecto. Para obtener más información, consulte https://aka.ms/sdkimplicititems . Los elementos duplicados fueron: '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 hiciera esto:

<EnableDefaultContentItems>false</EnableDefaultContentItems>

No se compilaría ya que de repente Areasno se reconocería.

Mi solución parece extraña, pero el mensaje me dice que había archivos duplicados:

Los elementos duplicados fueron: 'wwwroot \ js \ KOBindings.js'; 'wwwroot \ js \ KOPleaseWait.js'; 'wwwroot \ js \ ProjectTime \ Add.js'; 'wwwroot \ js \ TimeAdmin \ Invoice.js'; 'wwwroot \ js \ TimeAdmin \ PayPeriodTotals.js'

Mirando mi .csprojarchivo:

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

Esta fue la ÚNICA ubicación dentro de todo el proyecto donde estos archivos eran referencias (aparte de donde se cargaron). Por lo tanto, la frase duplicada no tiene ningún sentido para mí. Sin embargo, al comentar esos archivos como tales, se ocupó de mi 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>

Supongo que esto tiene algo que ver con lo 2.0.0-preview2-006497que instalé recientemente.

Además, este enlace menciona conversaciones sobre globs. Pero no me dice dónde está eso. Habla de SDK y tal. Sin embargo, la respuesta fueron mis .jsarchivos personalizados . Ese enlace debe actualizarse o ampliarse en mi humilde opinión. Espero que esto ayude a alguien.

Grandizer
fuente
Me encantaría saber por qué esto funciona. Sin embargo, solo funcionó para mí. =)
Frog Pr1nce
10

Como dice el enlace , puede deshabilitar este comportamiento (incluir automáticamente) e incluir todo el contenido explícitamente agregando esto a su csprojarchivo:

<PropertyGroup>
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
</PropertyGroup>
Dmitry
fuente
1
Cuando agrego eso a mi archivo csproj y elimino el grupo de elementos css / js, aparece el siguiente error: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
"Contenido" no "compilar": ¿no es así?
harveyt
Una nota al margen ... si no incluye explícitamente su carpeta Vistas, no publicará sus vistas con esta configuración
saluce el
Intenté esto pero no funcionó. sigue recibiendo el mismo error
pantonis
3

En mi caso, resolví esto eliminando todos los archivos del directorio wwwroot en VS. Descargue y vuelva a cargar el proyecto. Copie todos los archivos nuevamente con VS. Hecho

Alex Freund
fuente
¡Ninguna de las mejores soluciones funcionó para mí! ¡Hice esto antes de leer su comentario y funciona perfectamente! ¡Excluí wwwroot, controladores, carpetas de vistas y los agregué de nuevo y ahora todo funciona bien!
revobtz
2

En realidad, Asp.net núcleo incluyen de forma automática el contenido de wwwroot\css\, wwwroot\js\y wwwroot\lib\ubicación, así que a pesar de esto si su csprojarchivo de incluir explícitamente el contenido de esos directorios a continuación, los contenidos se duplicará lo que la eliminación de contenido que csprojel archivo es la mejor manera de deshacerse de este error. Así que elimine el contenido a continuació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>
Mostafiz
fuente
1
Esto me sucedió al actualizar Visual Studio a 15.3. Para evitar cambios importantes en mis colegas que aún no se han actualizado, tuve que agregar <PropertyGroup> <EnableDefaultContentItems>false</EnableDefaultContentItems> </PropertyGroup>al archivo .csproj.
Salsa
@saluce sí, tienes razón, la misma solución que puedes usar en tu contexto también. la elección se basa en el desarrollador si quiere quedarse EnableDefaultContentItemso no. Son dos enfoques diferentes
Mostafiz
Mi punto fue que el único cambio que hice fue actualizar Visual Studio a 15.3. No hice cambios en mi proyecto, pero antes de la actualización, esta configuración no era necesaria.
Salsa
2

Mi caso es deshabilitar los dos elementos predeterminados a continuación.

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

No es que pueda verlo en su ejemplo anterior, para ayudar a otros buscadores de SO.

También puede obtener este error cuando tiene el mismo archivo listado dos veces en <Content Include="xxx" />elementos en su csprojarchivo.

Eliminar el duplicado y reconstruir.

Sam
fuente
1

En Visual Studio 2017 15.3, con .NET Core 2.0, EnableDefaultCompileItems no funcionó para mí.

Necesitaba agregar esto a mi .csproj

  <PropertyGroup>
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
  </PropertyGroup>
Kiriacos
fuente
Para mí (Visual Studio 15.3.4 .NET Framework 4.5.2) EnableDefaultContentItems no funcionó mientras que EnableDefaultCompileItems sí.
hlovdal
1

Encontré una solución adecuada diferente.

  1. Haga clic derecho en su proyecto mvc y haga clic en Editar csproj.
  2. Si está agregando archivos en wwwroot, simplemente muévalos a una carpeta en wwwroot, digamos "tema"

Y elimine todas las etiquetas de contenido en el archivo csproj si existe, un ejemplo;

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

Y solo agrega esto;

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

Entonces, el archivo csproj debería verse así;

    <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 esa manera, creo que está agregando todos los archivos en la carpeta de temas. Por lo tanto, no los incluya uno por uno, ya que se producen algunos errores.

Lost_In_Library
fuente
1

Proyectos principales de .NET

Si está en una biblioteca de clase, probablemente necesitará eliminar todos los elementos de compilación / contenido de su csproj, ya que se incluyen automáticamente.

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

¡Excluir e incluir las carpetas que tienen errores de duplicados funcionó para mí! ¡Espero que esto ayude a alguien más!

revobtz
fuente
0

Creo que deshabilitar "EnableDefaultContentItems" no es la mejor opción. La cs-Projedición manual de archivos tampoco es una buena idea.

Entonces, para nuestro canal de servidores de compilación, escribimos una herramienta muy pequeña que eliminará todas las entradas duplicadas automáticamente: dotnet-csproj-cleaner

Lo ejecutamos en Docker como el primer paso de compilación en nuestra tubería de integración continua.

anakod
fuente
Parece agradable, pero ¿por qué se limita a proyectos con una ruta wwwroot?
John Zabroski
Es la ubicación de contenido VS estándar y su ruta se incluye de forma predeterminada. Si necesita una solución más compleja, no dude en enviar una solicitud de extracción. Debería ser muy fácil agregando argumentos de línea de comando adicionales. Gracias.
anakod
0

Tuve el mismo problema con solo un archivo, y todos los demás estaban funcionando (todas mis plantillas se almacenaron directamente en wwwroot / content). El proyecto no fue creado por mí, así que no conozco muchos detalles.

El problema se solucionó cambiando el nombre del archivo con el problema:

MyTemplate.html - renombrado -> MyTemplate2.html - renombrado -> MyTemplate.html

Nota : En el primer cambio de nombre, recibí un error con algo similar a " configuración de contenido no encontrada ", pero el segundo cambio de nombre funcionó sin problemas.

Después de esto pude compilar el proyecto con éxito.

Razvan
fuente