Itens duplicados de 'Conteúdo' foram incluídos. O .NET SDK inclui itens de 'Conteúdo' do diretório do projeto por padrão


132

Sempre que adiciono um arquivo javascript ou css ao meu projeto principal do asp.net e executo dotnet runno meu terminal bash, recebo o seguinte erro:

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

.NET.Sdk.DefaultItems.targets (188,5): erro: itens duplicados 'Conteúdo' foram incluídos. O .NET SDK inclui itens de 'Conteúdo' do diretório do projeto por padrão. Você pode remover esses itens do arquivo de projeto ou definir a propriedade 'EnableDefaultContentItems' como 'false' se desejar incluí-los explicitamente no arquivo de projeto. Para mais informações, consulte https://aka.ms/sdkimplicitititems . Os itens duplicados foram: 'wwwroot / css / BasicQuotation.css'; 'wwwroot / js / BasicQuotation.js' [/mnt/c/Dev/myproject/MyProject/MyProject.csproj]

A construção falhou. Corrija os erros de compilação e execute novamente.

Eu posso corrigir isso removendo o ItemGrouparquivo csproj, mas não acho que seja muito produtivo.

Isso acontece no modelo padrão do aplicativo Web ASP.NET Core do Visual Studio 2017 (.NET Core). Para adicionar os arquivos ao meu projeto, clique com o botão direito do mouse na pasta wwwroot> js e selecioneAdd > New Item > JavaScript File

Este é o meu arquivo .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 você está enfrentando esse problema após atualizar o VS2017 para a v15.3, verifique aqui . A Microsoft decidiu incluir agora certas pastas, como wwwroot, o que significa que elas provavelmente serão incluídas duas vezes.
jao

O artigo que o @jao compartilhou explica muito bem por que isso acontece e como corrigi-lo. Basta ir direto para esse artigo.
Pepito Fernandez 28/08

Respostas:


107

Então, eu tive esse mesmo problema. Não queria desativar o DefaultCompileItems porque sabia que isso não "consertaria" o problema. Então, eu descarreguei meu projeto e abri o arquivo .csproj no modo de texto no Visual Studio e vi isso.

<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 comentei o primeiro bloco ItemGroup, ele funcionou. O que eu suponho que esteja acontecendo é que o projeto está adicionando a pasta \ images \ friends-eating \ inteira e, em seguida, adicionando cada imagem individual, causando uma duplicação.

Quanto aos css e js personalizados, o projeto adiciona automaticamente wwwroot \ css e wwwroot \ js; portanto, se você tiver um arquivo individual adicionado (como wwwroot \ css \ custom-bootstrap-navbar.css), ele contará como duplicado.


Este <Folder Include="wwwroot\" />obras para mim, mas visual studio desfazer que mais tarde :(
Jaider

3
Ok, então eu não entendo. O que diabos o estúdio visual está realmente fazendo e 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'

3
Fazer isso resolveu o problema para mim, mas o que realmente aconteceu para fazê-lo funcionar?
Rono

@Rono Parece que identifica explicitamente todos os arquivos no seu arquivo wwwroot no arquivo .csproj. por exemplo: i.imgur.com/4SPnQ5h.png
J. Schei

4
Funcionou para mim também - e uma maneira muito mais segura de seguir na minha opinião do que a resposta aceita.
brinch 12/09

Funcionou para mim também! Desabilitar o DefaultContentItems ajudou a criar minha solução, mas imagens, CSSs e outros arquivos não estavam aparecendo.
Bruno Serrano

1
Depois de excluir "wwwroot", talvez seja necessário clicar no botão "Mostrar todos os arquivos" (que se parece com 3 folhas de papel empilhadas com uma bagunça) na parte superior do Solution Explorer para ver a pasta "wwwroot" e adicioná-la novamente O meu desapareceu e eu não sabia como recuperá-lo até encontrar este botão. A pasta ficará acinzentada para indicar que não está incluída.
James Toomey

25

Isso funcionou no meu caso:

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

3
Como afirmado no meu comentário à resposta de Pinki, eu não proporia isso como solução, pois isso poderia levar a mais erros.
Matt

Na verdade, tive problemas maiores ao definir esta opção como falsa. Eu também recomendaria não defini-lo como false.
Rwiti

Qual é a maneira mais limpa de incluir uma pasta totalmente como elementos EmbeddedResource?
John Zabroski 12/02/19

Depois disso, o wwwroot não estava mais incluído. Então é melhor não usar esse ...
UNeverNo

14

Aconteceu quando eu atualizei meu projeto do .NET Core 1.X para 2.0 agora. Aqui está a minha solução.

  • Abra xxx.csproj ou clique com o botão direito do mouse no projeto
  • Descarregar projeto
  • Edite xxx.csproj.

Em seguida, remova os itens do ItemGroup começando com <Content Include = "wwwroot\xxxxx"


Obrigado! Nota: Parece estar relacionado à versão mais recente do Visual Studio 15.3, e não diretamente ao .NET Core 2.0
Vincent V.

10

Meus problemas estavam próximos, mas não exatamente o mesmo. Meu erro foi este:

C: \ Arquivos de programas \ dotnet \ sdk \ 2.0.0-preview2-006497 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.NET.Sdk.DefaultItems.targets (285,5): erro: itens duplicados 'Conteúdo' foram incluídos. O .NET SDK inclui itens de 'Conteúdo' do diretório do projeto por padrão. Você pode remover esses itens do arquivo do projeto ou definir a propriedade 'EnableDefaultContentItems' como 'false' se desejar incluí-los explicitamente no arquivo do projeto. Para mais informações, consulte https://aka.ms/sdkimplicitititems . Os itens duplicados foram: '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 eu fizesse isso:

<EnableDefaultContentItems>false</EnableDefaultContentItems>

Não seria compilado, pois de repente Areasnão seria reconhecido.

Minha solução parece estranha, mas a mensagem está me dizendo isso, havia arquivos duplicados:

Os itens duplicados foram: 'wwwroot \ js \ KOBindings.js'; 'wwwroot \ js \ KOPleaseWait.js'; 'wwwroot \ js \ ProjectTime \ Add.js'; 'wwwroot \ js \ TimeAdmin \ Invoice.js'; 'wwwroot \ js \ TimeAdmin \ PayPeriodTotals.js'

Olhando para o meu .csprojarquivo:

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

Este era o único local dentro de todo o projeto em que esses arquivos eram referências (além de onde eles foram carregados.) Portanto, a frase duplicado não faz sentido para mim. No entanto, ao comentar esses arquivos, o problema foi resolvido:

<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 que isso tenha algo a ver com o 2.0.0-preview2-006497que eu instalei recentemente.

Além disso, este link menciona conversas sobre globs. Mas não me diz onde é isso. Ele fala sobre SDKs e coisas assim. No entanto, a resposta foram meus .jsarquivos personalizados . Esse link precisa ser atualizado ou expandido no IMHO. Espero que isso ajude alguém.


Gostaria de saber por que isso funciona. No entanto, apenas funcionou para mim. =)
Prog Pr1nce 31/08/19

10

Como o link diz , você pode desativar esse comportamento (incluir automaticamente) e incluir todo o conteúdo explicitamente adicionando isso ao seu csprojarquivo:

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

1
Quando adiciono isso ao meu arquivo csproj e removo o item de grupo css / js, recebo o seguinte erro: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
"Conteúdo" não "Compilar" - não é?
harveyt

Uma observação lateral .... se você não incluir explicitamente sua pasta Views, ela não publicará suas views com essa configuração
saluce 21/08

Eu tentei isso, mas não funcionou. ainda obter o mesmo erro
pantonis

3

No meu caso, resolvi isso excluindo todos os arquivos do wwwroot-Directory no VS. Descarregue e recarregue o projeto. Copie todos os arquivos novamente com o VS. Feito


Nenhuma das principais soluções funcionou para mim. Eu fiz isso antes de ler seu comentário e isso funciona perfeitamente !!! Excluí o wwwroot, controladores, visualiza as pastas e as adicionei de volta e agora tudo funciona bem!
Revobtz

2

Na verdade, Asp.net núcleo incluir automaticamente o conteúdo de wwwroot\css\, wwwroot\js\e wwwroot\lib\localização, por isso, apesar disso, se o seu csprojarquivo de incluir explicitamente o conteúdo dessas listas, em seguida, os conteúdos serão duplicados de modo a remoção de conteúdo de você csprojarquivo é a melhor maneira de se livrar deste erro. Portanto, remova o conteúdo abaixo

  <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
Isso aconteceu comigo ao atualizar o Visual Studio para 15.3. Para evitar quebras de alterações nos meus colegas que ainda não foram atualizados, tive que adicionar <PropertyGroup> <EnableDefaultContentItems>false</EnableDefaultContentItems> </PropertyGroup>ao arquivo .csproj.
saluce

@ saluce sim, você está certo, a mesma solução que você pode usar no seu contexto também. a escolha é baseada no desenvolvedor, quer ele queira EnableDefaultContentItemsou não. Eles são dois abordagem diferente
Mostafiz

Meu argumento foi que a única alteração que fiz foi atualizar o Visual Studio para 15.3. Não fiz alterações no meu projeto, mas antes da atualização, essa configuração não era necessária.
saluce

2

Meu caso é desativar os dois itens abaixo padrão.

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

1

Não que eu possa vê-lo no seu exemplo acima, para ajudar outros pesquisadores de SO ..

Você também pode obter esse erro quando tiver o mesmo arquivo listado duas vezes em <Content Include="xxx" />elementos em seu csprojarquivo.

Remova a duplicata e reconstrua.


1

No Visual Studio 2017 15.3, com o .NET Core 2.0, EnableDefaultCompileItems não funcionou para mim.

Eu precisava adicionar isso ao meu .csproj

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

Para mim (visual studio 15.3.4 .NET framework 4.5.2) EnableDefaultContentItems não funcionou enquanto EnableDefaultCompileItems funcionou.
hlovdal 13/09

1

Encontrei uma solução adequada diferente.

  1. Clique com o botão direito do mouse no seu projeto mvc e clique em Editar csproj.
  2. Se você estiver adicionando arquivos em wwwroot, basta movê-los para uma pasta em wwwroot, digamos "tema"

E exclua todas as tags de conteúdo no arquivo csproj, se existirem, um exemplo;

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

E apenas adicione isso;

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

Portanto, o arquivo csproj deve ficar assim;

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

Dessa forma, acho que você está adicionando todos os arquivos na pasta do tema. Portanto, não os inclua um por um, que ocorre alguns erros.


1

Projetos principais do .NET

Se você estiver em uma biblioteca de classes, provavelmente precisará remover todos os elementos de Compilação / Conteúdo do seu csproj, pois eles são incluídos 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

Excluir e incluir as pastas com erro duplicado funcionou para mim! Espero que isso ajude alguém!


0

Acho que desativar "EnableDefaultContentItems" não é a melhor opção. A cs-Projedição manual de arquivos também não é uma boa ideia.

Portanto, para o nosso pipeline de servidor de compilação, escrevemos uma ferramenta muito pequena que removerá todas as entradas duplicadas automaticamente: dotnet-csproj-cleaner

Nós o executamos no Docker como a primeira etapa de compilação em nosso pipeline de integração contínua.


Parece bom, mas por que é limitado a projetos com um caminho wwwroot?
John Zabroski 12/02/19

É a localização padrão do conteúdo do VS e o caminho é incluído por padrão. Se você precisar de uma solução mais complexa, sinta-se à vontade para enviar uma solicitação de recebimento. Deve ser muito fácil adicionar argumentos de linha de comando adicionais. Obrigado.
Anakod 25/07/19

0

Eu tive o mesmo problema com apenas um arquivo e todos os outros estavam funcionando (todos os meus modelos foram armazenados diretamente em wwwroot / content). O projeto não foi criado por mim, portanto não conheço muitos detalhes.

O problema foi corrigido renomeando o arquivo com o problema:

MyTemplate.html - renomeado -> MyTemplate2.html - renomeado -> MyTemplate.html

Nota : Na primeira renomeação, ocorreu um erro com algo como " configuração de conteúdo não encontrada ", mas a segunda renomeação funcionou sem problemas.

Depois disso, consegui compilar o projeto com sucesso.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.