Uwzględniono zduplikowane elementy „Treść”. Zestaw .NET SDK domyślnie zawiera elementy „Treść” z katalogu projektu

134

Za każdym razem, gdy dodaję plik javascript lub css do mojego podstawowego projektu asp.net i wykonuję dotnet runw terminalu bash, pojawia się następujący błąd:

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

.NET.Sdk.DefaultItems.targets (188,5): błąd: uwzględniono zduplikowane elementy „Treść”. Zestaw .NET SDK domyślnie zawiera elementy „Treść” z katalogu projektu. Możesz usunąć te elementy z pliku projektu lub ustawić właściwość „EnableDefaultContentItems” na „false”, jeśli chcesz jawnie uwzględnić je w pliku projektu. Aby uzyskać więcej informacji, zobacz https://aka.ms/sdkimplicititems . Zduplikowane pozycje to: „wwwroot / css / BasicQuotation.css”; „wwwroot / js / BasicQuotation.js” [/mnt/c/Dev/myproject/MyProject/MyProject.csproj]

Kompilacja nie powiodła się. Popraw błędy kompilacji i uruchom ponownie.

Mogę to naprawić, usuwając ItemGroupplik z mojego pliku csproj, ale nie sądzę, aby to było zbyt wydajne.

Dzieje się tak w domyślnym szablonie aplikacji sieci Web ASP.NET Core programu Visual Studio 2017 (.NET Core). Dodaję pliki do mojego projektu, klikając prawym przyciskiem myszy folder wwwroot> js, a następnie wybierającAdd > New Item > JavaScript File

To jest mój plik .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
źródło
13
Jeśli napotkasz ten problem po aktualizacji VS2017 do wersji 15.3, zajrzyj tutaj . Firma MS zdecydowała się teraz domyślnie uwzględnić pewne foldery, takie jak wwwroot, co oznacza, że ​​prawdopodobnie są one uwzględniane dwukrotnie.
jao
Artykuł udostępniony przez @jao bardzo dobrze wyjaśnia, dlaczego tak się dzieje i jak to naprawić. Po prostu przejdź bezpośrednio do tego artykułu.
Pepito Fernandez

Odpowiedzi:

108

Więc napotkałem ten sam problem. Nie chciałem wyłączać DefaultCompileItems, ponieważ wiedziałem, że to nie „rozwiąże” problemu. Zwolniłem więc projekt i otworzyłem plik .csproj w trybie tekstowym w programie Visual Studio i zobaczyłem to.

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

Kiedy skomentowałem pierwszy blok ItemGroup, zadziałało. Zakładam, że dzieje się tak, że projekt polega na dodaniu całego folderu \ images \ friends-eating \, a następnie dodaniu każdego pojedynczego obrazu, powodując duplikację.

Jeśli chodzi o niestandardowe css i js, projekt automatycznie dodaje wwwroot \ css i wwwroot \ js, więc jeśli masz dodany pojedynczy plik (np. Wwwroot \ css \ custom-bootstrap-navbar.css), będzie się liczył jako duplikat.

Piński
źródło
U <Folder Include="wwwroot\" />mnie to działa, ale studio wizualne
cofa
4
Ok, więc nie rozumiem. Co do diabła właściwie robi studio wizualne i dlaczego?
tnk479
196
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
źródło
3
To rozwiązało problem za mnie, ale co tak naprawdę sprawiło, że to zadziałało?
Rono
@Rono Wygląda na to, że jawnie identyfikuje wszystkie pliki w pliku wwwroot w pliku .csproj. np .: i.imgur.com/4SPnQ5h.png
J. Schei
4
U mnie też zadziałało - i moim zdaniem o wiele bezpieczniejszy sposób, niż zaakceptowana odpowiedź.
brinch
Na mnie też się udało! Wyłączenie DefaultContentItems pomogło w stworzeniu mojego rozwiązania, ale obrazy, pliki CSS i inne pliki nie były wyświetlane.
Bruno Serrano,
1
Po wykluczeniu „wwwroot” może być konieczne kliknięcie przycisku „Pokaż wszystkie pliki” (który wygląda jak 3 arkusze papieru ułożone w bałagan) u góry Eksploratora rozwiązań, aby wyświetlić folder „wwwroot” i dodać go z powrotem w. Mój zniknął i nie wiedziałem, jak go odzyskać, dopóki nie znalazłem tego przycisku. Folder będzie wyszarzony, co oznacza, że ​​nie jest uwzględniony.
James Toomey
25

To zadziałało w moim przypadku:

 <PropertyGroup>
    ...
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
  </PropertyGroup>
harveyt
źródło
3
Jak stwierdzono w moim komentarzu do odpowiedzi Pinkiego, nie proponowałbym tego jako rozwiązania, ponieważ mogłoby to prowadzić do większej liczby błędów.
Matt
Właściwie napotkałem większe problemy, ustawiając tę ​​opcję na fałsz. Poleciłbym również nie ustawiać go na fałsz.
Rwiti,
Jaki jest najprostszy sposób na włączenie folderu w całości jako elementy EmbeddedResource?
John Zabroski
Po tym wwwroot nie był już uwzględniany. Więc lepiej nie używaj tego ...
UNeverNo
14

Stało się tak, gdy właśnie teraz uaktualniam swój projekt z .NET Core 1.X do 2.0. Oto moje rozwiązanie.

  • Otwórz xxx.csproj lub kliknij projekt prawym przyciskiem myszy
  • Rozładuj projekt
  • Edytuj xxx.csproj.

Następnie usuń elementy ItemGroup zaczynające się od <Content Include = "wwwroot\xxxxx"

wtf512
źródło
Dzięki! Uwaga: wydaje się, że jest powiązany z najnowszą wersją programu Visual Studio 15.3, a nie bezpośrednio z .NET Core 2.0
Vincent V.
10

Moje problemy były bliskie, ale nie takie same. Mój błąd był taki:

C: \ Program Files \ dotnet \ sdk \ 2.0.0-preview2-006497 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.NET.Sdk.DefaultItems.targets (285,5): błąd: zduplikowane elementy „Treść” były dołączone. Zestaw .NET SDK domyślnie zawiera elementy „Treść” z katalogu projektu. Możesz usunąć te elementy z pliku projektu lub ustawić właściwość „EnableDefaultContentItems” na „false”, jeśli chcesz jawnie uwzględnić je w pliku projektu. Aby uzyskać więcej informacji, zobacz https://aka.ms/sdkimplicititems . Zduplikowane elementy to: „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 \ Karta czasu \ avantia-timesheet \ Solution \ Almanac \ Almanac.

Gdybym to zrobił:

<EnableDefaultContentItems>false</EnableDefaultContentItems>

Nie skompilowałby się, ponieważ nagle Areasnie zostałby rozpoznany.

Moje rozwiązanie wydaje się dziwne, ale komunikat mówi mi, że były zduplikowane pliki:

Zduplikowane elementy to: „wwwroot \ js \ KOBindings.js”; 'wwwroot \ js \ KOPleaseWait.js'; 'wwwroot \ js \ ProjectTime \ Add.js'; 'wwwroot \ js \ TimeAdmin \ Invoice.js'; „wwwroot \ js \ TimeAdmin \ PayPeriodTotals.js”

Patrząc na mój .csprojplik:

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

To była JEDYNA lokalizacja w całym projekcie, w której te pliki były odniesieniami (poza miejscem ich załadowania). Zatem wyrażenie Duplikat nie ma dla mnie żadnego sensu. Jednak skomentowanie tych plików jako takich rozwiązało mój problem:

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

Zakładam, że ma to coś wspólnego z tym 2.0.0-preview2-006497, co ostatnio zainstalowałem.

Również ten link wspomina o rozmowach o globach. Ale nie mówi mi, gdzie to jest. Mówi o SDK i tym podobnych. Jednak odpowiedzią były moje .jspliki niestandardowe . Ten link należy zaktualizować lub rozszerzyć w IMHO. Mam nadzieję, że to komuś pomoże.

Grandizer
źródło
Chciałbym wiedzieć, dlaczego to działa. Jednak po prostu pracował dla mnie. =)
Frog Pr1nce
10

Jak mówi link , możesz wyłączyć to zachowanie (automatyczne dołączanie) i jawnie dołączyć całą zawartość, dodając to do swojego csprojpliku:

<PropertyGroup>
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
</PropertyGroup>
Dmitrij
źródło
1
Kiedy dodam to do mojego pliku csproj i usuwam grupę elementów css / js, pojawia się następujący błąd: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
„Treść”, a nie „Kompiluj” - prawda?
harveyt
Na marginesie ... jeśli nie
dodasz
Próbowałem tego, ale to nie zadziałało. nadal
pojawia
3

W moim przypadku rozwiązałem to, usuwając wszystkie pliki z katalogu wwwroot-Directory w VS. Usuń i ponownie załaduj projekt. Skopiuj wszystkie pliki z powrotem za pomocą VS. Gotowe

Alex Freund
źródło
Żadne z najlepszych rozwiązań nie zadziałało. Zrobiłem to przed przeczytaniem twojego komentarza i działa bez zarzutu !!! Wykluczyłem wwwroot, kontrolery, foldery widoków i dodałem je z powrotem i teraz wszystko działa dobrze!
revobtz
3

Projekty .NET Core

Jeśli jesteś w bibliotece klas, prawdopodobnie będziesz musiał usunąć wszystkie elementy Compile / Content ze swojego csproj, ponieważ są one dołączane automatycznie.

<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
źródło
2

Właściwie Asp.net rdzeń automatycznie obejmuje treści z wwwroot\css\, wwwroot\js\i wwwroot\lib\lokalizację, więc mimo to jeśli csprojplik wyraźnie zawierać treści z tych katalogów, a następnie tych, zawartość zostanie powielony usunięcie treści z ciebie csprojplik jest lepszy sposób, aby pozbyć się tego błędu. Więc usuń poniższą zawartość-

  <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
źródło
1
Zdarzyło mi się to podczas aktualizacji programu Visual Studio do wersji 15.3. Aby zapobiec wprowadzaniu zmian u moich kolegów, którzy jeszcze nie zaktualizowali, musiałem dodać <PropertyGroup> <EnableDefaultContentItems>false</EnableDefaultContentItems> </PropertyGroup>plik do pliku .csproj.
saluce
@saluce tak, masz rację, to samo rozwiązanie, którego możesz użyć w swoim kontekście. wybór zależy od dewelopera, czy chce zachować, EnableDefaultContentItemsczy nie. Są to dwa różne podejścia
Mostafiz
Chodziło mi o to, że jedyną zmianą, jaką wprowadziłem, była aktualizacja programu Visual Studio do wersji 15.3. Nie wprowadziłem żadnych zmian w moim projekcie, ale przed aktualizacją to ustawienie nie było wymagane.
salutować
2

W moim przypadku wyłączam oba poniższe elementy domyślne.

<EnableDefaultContentItems>false</EnableDefaultContentItems>
<EnableDefaultItems>false</EnableDefaultItems>
Duy Hoang
źródło
1

Nie to, żebym mógł to zobaczyć w powyższym przykładzie, aby pomóc innym wyszukiwarkom SO.

Możesz również otrzymać ten błąd, gdy ten sam plik jest wymieniony dwukrotnie w <Content Include="xxx" /> elementach csprojpliku.

Usuń duplikat i odbuduj.

Sam
źródło
1

W programie Visual Studio 2017 15.3 z .NET Core 2.0 EnableDefaultCompileItems nie działało dla mnie.

Musiałem dodać to do mojego .csproj

  <PropertyGroup>
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
  </PropertyGroup>
Kyriacos
źródło
Dla mnie (Visual Studio 15.3.4 .NET Framework 4.5.2) EnableDefaultContentItems nie działało, podczas gdy EnableDefaultCompileItems.
hlovdal
1

Znalazłem inne właściwe rozwiązanie.

  1. Kliknij prawym przyciskiem myszy projekt mvc i kliknij Edytuj csproj.
  2. Jeśli dodajesz pliki pod wwwroot, po prostu przenieś je do folderu pod wwwroot, powiedzmy, że to „motyw”

I usuń wszystkie tagi treści w pliku csproj, jeśli istnieją, przykład;

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

I tylko dodaj to;

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

Zatem plik csproj powinien wyglądać tak;

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

W ten sposób myślę, że dodajesz wszystkie pliki do folderu motywu. Więc nie dołączaj ich jeden po drugim, co powoduje pewne błędy.

Lost_In_Library
źródło
0

Wykluczanie i włączanie z powrotem folderów, które mają błąd duplikatów, zadziałało dla mnie! Mam nadzieję, że to pomoże komuś innemu!

revobtz
źródło
0

Myślę, że wyłączenie „EnableDefaultContentItems” nie jest najlepszą opcją. podręcznikcs-Proj edycja plików również nie jest dobrym pomysłem.

Dlatego dla naszego potoku serwera kompilacji napisaliśmy bardzo małe narzędzie, które automatycznie usunie wszystkie zduplikowane wpisy: dotnet-csproj-cleaner

Uruchamiamy go w Dockerze jako pierwszy krok kompilacji w naszym potoku ciągłej integracji.

anakod
źródło
Wydaje się fajne, ale dlaczego ogranicza się do projektów ze ścieżką wwwroot?
John Zabroski
Jest to standardowa lokalizacja zawartości VS, a ścieżka jest dołączona domyślnie. Jeśli potrzebujesz bardziej złożonego rozwiązania - możesz przesłać prośbę o ściągnięcie. Powinno być bardzo łatwe poprzez dodanie dodatkowych argumentów wiersza poleceń. Dziękuję Ci.
anakod
0

Miałem ten sam problem tylko z plikiem, a wszystkie inne działały (wszystkie moje szablony były przechowywane bezpośrednio w wwwroot / content). Projekt nie został stworzony przeze mnie, więc nie znam wielu szczegółów.

Problem został rozwiązany przez zmianę nazwy pliku, w którym pojawił się problem:

MyTemplate.html - zmieniono nazwę -> MyTemplate2.html - zmieniono nazwę -> MyTemplate.html

Uwaga : przy pierwszej zmianie nazwy pojawił się błąd z czymś w rodzaju „ Nie znaleziono konfiguracji zawartości ”, ale druga zmiana nazwy działała bez problemów.

Po tym udało mi się pomyślnie skompilować projekt.

Razvan
źródło