Các mục 'Nội dung' trùng lặp được bao gồm. .NET SDK bao gồm các mục 'Nội dung' từ thư mục dự án của bạn theo mặc định


132

Bất cứ khi nào tôi thêm tệp javascript hoặc css vào dự án lõi asp.net của mình và tôi thực thi dotnet runtrong thiết bị đầu cuối bash của mình, tôi gặp lỗi sau:

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

.NET.Sdk.DefaultItems.target (188,5): lỗi: Đã bao gồm các mục 'Nội dung' trùng lặp. .NET SDK bao gồm các mục 'Nội dung' từ thư mục dự án của bạn theo mặc định. Bạn có thể xóa các mục này khỏi tệp dự án của mình hoặc đặt thuộc tính 'EnableDefaultContentItems' thành 'false' nếu bạn muốn đưa chúng vào tệp dự án một cách rõ ràng. Để biết thêm thông tin, hãy xem https://aka.ms/sdkimplicititems . Các mục trùng lặp là: 'wwwroot / css / BasicQuotation.css'; 'wwwroot / js / BasicQuotation.js' [/mnt/c/Dev/myproject/MyProject/MyProject.csproj]

Việc xây dựng thất bại. Vui lòng sửa lỗi xây dựng và chạy lại.

Tôi có thể khắc phục điều này bằng cách xóa ItemGrouptệp csproj của mình, nhưng tôi không nghĩ rằng nó rất hiệu quả.

Điều này xảy ra trong mẫu ứng dụng ASP.NET Core Web (.NET Core) mặc định của Visual Studio 2017. Tôi thêm các tệp vào dự án của mình bằng cách nhấp chuột phải vào thư mục wwwroot> js và sau đó chọnAdd > New Item > JavaScript File

Đây là tệp .csproj của tôi:

<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
Nếu bạn đang gặp phải vấn đề này sau khi cập nhật VS2017 lên v15.3, hãy đảm bảo bạn xem ở đây . MS đã quyết định bao gồm một số thư mục nhất định như wwwroot theo mặc định, điều này có nghĩa là chúng có thể được bao gồm hai lần.
Jao

Bài viết mà @jao chia sẻ, giải thích rất rõ tại sao điều này xảy ra và cách khắc phục nó. Chỉ cần đi thẳng đến bài viết đó.
Pepito Fernandez

Câu trả lời:


107

Vì vậy, tôi gặp vấn đề tương tự. Tôi không muốn tắt DefaultCompileItems vì tôi biết rằng sẽ không "khắc phục" sự cố. Vì vậy, tôi đã dỡ dự án của mình và mở tệp .csproj ở chế độ văn bản trong Visual Studio và thấy điều này.

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

Khi tôi nhận xét khối Itemgroup đầu tiên, nó đã hoạt động. Những gì tôi giả sử đang xảy ra là dự án đang thêm toàn bộ thư mục \ hình ảnh \ bạn bè ăn \ và sau đó thêm từng hình ảnh riêng lẻ, gây ra sự trùng lặp.

Theo như css và js tùy chỉnh, dự án sẽ tự động thêm wwwroot \ css và wwwroot \ js để nếu bạn có một tệp riêng lẻ được thêm vào (như wwwroot \ css \ custom-bootstrap-navbar.css), nó sẽ được tính là trùng lặp.


Điều này <Folder Include="wwwroot\" />làm việc cho tôi, nhưng studio hình ảnh hoàn tác sau đó vào :(
Jaider

3
Ok vì vậy tôi không nhận được nó. Studio thực sự đang làm cái quái gì và tại sao?
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
Làm điều này giải quyết vấn đề cho tôi, nhưng những gì thực sự đã xảy ra để làm cho nó hoạt động?
Rono

@Rono Có vẻ như nó xác định rõ ràng tất cả các tệp trong tệp wwwroot của bạn trong tệp .csproj. ví dụ: i.imgur.com/4SPnQ5h.png
J. Schei

4
Làm việc cho tôi là tốt - và theo tôi là một cách an toàn hơn nhiều so với câu trả lời được chấp nhận.
brinch

Nó làm việc cho tôi quá! Vô hiệu hóa DefaultContentItems đã giúp xây dựng giải pháp của tôi, nhưng hình ảnh, CSS và các tệp khác không hiển thị.
Bruno Serrano

1
Khi bạn loại trừ "wwwroot", bạn có thể phải nhấp vào nút "Hiển thị tất cả tệp" (trông giống như 3 tờ giấy được xếp chồng lên nhau) ở đầu Solution Explorer để xem thư mục "wwwroot" để bạn có thể thêm lại Trong. Của tôi biến mất và tôi không biết làm thế nào để lấy lại cho đến khi tôi tìm thấy nút này. Thư mục sẽ có màu xám cho biết nó không được bao gồm.
James Toomey

25

Điều này làm việc trong trường hợp của tôi:

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

3
Như đã nêu trong nhận xét của tôi đối với câu trả lời của Pinki, tôi sẽ không đề xuất đây là giải pháp vì điều này có thể dẫn đến nhiều lỗi hơn.
Matt

Tôi thực sự gặp vấn đề lớn hơn khi đặt tùy chọn này thành false. Tôi cũng khuyên bạn không nên đặt nó thành false.
Rwiti

Cách sạch nhất để đưa Thư mục được bao gồm hoàn toàn dưới dạng các phần tử EmbeddedResource là gì?
John Zabroski

Sau wwwroot này không còn được bao gồm nữa. Vì vậy, tốt hơn đừng sử dụng điều này ...
UNeverKhông

14

Thật hạnh phúc khi tôi nâng cấp dự án của mình từ .NET Core 1.X lên 2.0 ngay bây giờ. Đây là giải pháp của tôi.

  • Mở xxx.csproj hoặc nhấp chuột phải vào dự án
  • Dự án dỡ hàng
  • Chỉnh sửa xxx.csproj.

Sau đó xóa các mục Itemgroup bắt đầu bằng <Content Include = "wwwroot\xxxxx"


Cảm ơn! Lưu ý: Có vẻ như nó có liên quan đến Visual Studio phiên bản 15.3 mới nhất, không trực tiếp với .NET Core 2.0
Vincent V.

10

Các vấn đề của tôi rất gần nhưng không giống nhau. Lỗi của tôi là:

C: \ Tệp chương trình \ dotnet \ sdk \ 2.0.0-preview2-006497 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.NET.Sdk.DefaultItems.target (285,5): lỗi: Sao chép các mục 'Nội dung' đã được bao gồm. .NET SDK bao gồm các mục 'Nội dung' từ thư mục dự án của bạn theo mặc định. Bạn có thể xóa các mục này khỏi tệp dự án của mình hoặc đặt thuộc tính 'EnableDefaultContentItems' thành 'false' nếu bạn muốn đưa chúng vào tệp dự án một cách rõ ràng. Để biết thêm thông tin, hãy xem https://aka.ms/sdkimplicititems . Các mục trùng lặp là: '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 Project \ Time Card \ avantia-timesheet \ Solution \ Almanac \ Almanac.

Nếu tôi đã làm điều này:

<EnableDefaultContentItems>false</EnableDefaultContentItems>

Nó sẽ không được biên dịch vì tất cả đột ngột Areassẽ không được công nhận.

Giải pháp của tôi, có vẻ kỳ lạ, nhưng thông báo đang nói với tôi như vậy, có các tệp trùng lặp:

Các mục trùng lặp là: 'wwwroot \ js \ KOBindings.js'; 'wwwroot \ js \ KOPleaseWait.js'; 'wwwroot \ js \ ProjectTime \ Add.js'; 'wwwroot \ js \ TimeAdmin \ Invoice.js'; 'wwwroot \ js \ TimeAdmin \ PayPeriodTotals.js'

Nhìn vào .csprojtập tin của tôi :

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

Đây là vị trí DUY NHẤT trong toàn bộ dự án nơi các tệp này là tài liệu tham khảo (ngoài nơi chúng được tải.) Vì vậy, cụm từ trùng lặp không có ý nghĩa gì với tôi. Tuy nhiên, nhận xét các tệp như vậy, đã giải quyết vấn đề của tôi:

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

Tôi giả sử điều này có liên quan đến cái 2.0.0-preview2-006497mà tôi đã cài đặt gần đây.

Ngoài ra, liên kết này đề cập đến nói về sự ảm đạm. Nhưng không cho tôi biết đó là đâu. Nó nói về SDK và như vậy. Tuy nhiên, câu trả lời là các .jstập tin tùy chỉnh của tôi . Liên kết đó cần được cập nhật hoặc mở rộng trên IMHO. Hy vọng điều này sẽ giúp được ai đó.


Rất muốn biết lý do tại sao điều này làm việc. Tuy nhiên, chỉ làm việc cho tôi. =)
Ếch Pr1nce

10

Như liên kết nói , bạn có thể vô hiệu hóa hành vi này (bao gồm tự động) và bao gồm tất cả nội dung một cách rõ ràng bằng cách thêm nội dung này vào csprojtệp của bạn :

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

1
Khi tôi thêm nó vào tệp csproj của mình và tôi xóa nhóm mục css / js, tôi gặp lỗi sau: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
"Nội dung" không phải "Biên dịch" - Phải không?
quấy rối

Lưu ý một mặt .... nếu bạn không bao gồm rõ ràng thư mục Lượt xem của mình, nó sẽ không xuất bản lượt xem của bạn với cài đặt này
chào

Tôi đã thử điều này nhưng nó không hoạt động. vẫn nhận được cùng một lỗi
pantonis

3

Trong trường hợp của tôi, tôi đã giải quyết điều này bằng cách xóa tất cả các tệp khỏi wwwroot-Directory trong VS. Dỡ bỏ và tải lại Dự án. Sao chép tất cả các tệp trở lại với VS. Làm xong


Không có giải pháp hàng đầu nào làm việc cho tôi Tôi đã làm điều này trước khi đọc bình luận của bạn và điều này hoạt động hoàn hảo !!! Tôi đã loại trừ wwwroot, bộ điều khiển, thư mục xem và thêm chúng trở lại và bây giờ mọi thứ đều hoạt động tốt!
revazedz

2

Trên thực tế, Asp.net lõi tự động bao gồm nội dung từ wwwroot\css\, wwwroot\js\wwwroot\lib\vị trí, vì vậy mặc dù điều này nếu bạn csprojtập tin bao gồm một cách rõ ràng nội dung từ các thư mục sau đó những nội dung sẽ được nhân đôi để loại bỏ nội dung từ bạn csprojtập là cách tốt hơn để thoát khỏi lỗi này. Vì vậy, loại bỏ nội dung dưới đây-

  <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
Điều này đã xảy ra với tôi khi cập nhật Visual Studio lên 15.3. Để ngăn chặn các thay đổi đối với các đồng nghiệp chưa cập nhật, tôi đã phải thêm <PropertyGroup> <EnableDefaultContentItems>false</EnableDefaultContentItems> </PropertyGroup>vào tệp .csproj.
sốt

@saluce có bạn đúng, cùng một giải pháp bạn có thể sử dụng trong ngữ cảnh của bạn. sự lựa chọn dựa trên nhà phát triển cho dù anh ta có muốn giữ EnableDefaultContentItemshay không. Chúng là hai cách tiếp cận khác nhau
Mostafiz

Quan điểm của tôi là thay đổi duy nhất tôi đã thực hiện là nâng cấp Visual Studio lên 15.3. Tôi không thực hiện thay đổi nào cho dự án của mình, nhưng trước khi nâng cấp, cài đặt này không bắt buộc.
sốt

2

Trường hợp của tôi tôi là vô hiệu hóa cả hai mục bên dưới.

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

1

Không phải là tôi có thể thấy nó trong ví dụ của bạn ở trên, để giúp những người tìm kiếm SO khác ..

Bạn cũng có thể gặp lỗi này khi bạn có cùng một tệp được liệt kê hai lần trong <Content Include="xxx" />các phần tử trongcsproj tệp .

Loại bỏ các bản sao và xây dựng lại.


1

Trong Visual Studio 2017 15.3, với .NET Core 2.0, EnableDefaultCompileItems không hoạt động với tôi.

Tôi cần thêm cái này vào .csproj của tôi

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

Đối với tôi (visual studio 15.3.4 .NET framework 4.5.2) EnableDefaultContentItems không hoạt động trong khi EnableDefaultCompileItems đã làm.
hlovdal

1

Tôi tìm thấy một giải pháp thích hợp khác nhau.

  1. Nhấp chuột phải vào dự án mvc của bạn và nhấp vào Chỉnh sửa csproj.
  2. Nếu bạn đang thêm các tệp trong wwwroot, chỉ cần di chuyển chúng vào một thư mục trong wwwroot, hãy nói đó là "chủ đề"

Và xóa tất cả các thẻ nội dung trong tệp csproj nếu chúng tồn tại, một ví dụ;

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

Và chỉ thêm điều này;

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

Vì vậy, tập tin csproj nên trông như thế này;

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

Theo cách đó, tôi nghĩ rằng bạn đang thêm tất cả các tệp trong thư mục chủ đề. Vì vậy, không bao gồm chúng từng cái một mà xảy ra một số erros.


1

Dự án .NET Core

Nếu bạn đang ở trong thư viện lớp, có lẽ bạn sẽ cần xóa tất cả các thành phần Biên dịch / Nội dung khỏi csproj vì chúng được bao gồm tự động.

<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

Không bao gồm và bao gồm lại các thư mục có lỗi trùng lặp làm việc cho tôi! Hy vọng điều này sẽ giúp người khác!


0

Tôi nghĩ những gì vô hiệu hóa "EnableDefaultContentItems" không phải là lựa chọn tốt nhất. Hướng dẫn cs-Projchỉnh sửa tập tin cũng không phải là ý tưởng tốt ở tất cả.

Vì vậy, đối với đường ống máy chủ xây dựng của chúng tôi, chúng tôi đã viết công cụ rất nhỏ những gì sẽ loại bỏ tự động tất cả các mục trùng lặp: dotnet-csproj-cleaner

Chúng tôi chạy nó dưới Docker là bước xây dựng đầu tiên trong đường ống tích hợp liên tục của chúng tôi.


Có vẻ tốt nhưng tại sao nó lại giới hạn trong các dự án có đường dẫn wwwroot?
John Zabroski

Đó là vị trí nội dung VS tiêu chuẩn và đường dẫn của nó được bao gồm theo mặc định. Nếu bạn cần giải pháp phức tạp hơn - xin vui lòng gửi yêu cầu kéo. Nó sẽ rất dễ dàng bằng cách thêm các đối số dòng lệnh bổ sung. Cảm ơn bạn.
anakod

0

Tôi gặp vấn đề tương tự chỉ với một tệp và tất cả các tệp khác đều hoạt động (tất cả các mẫu của tôi được lưu trữ trực tiếp trong wwwroot / nội dung). Dự án không phải do tôi tạo ra nên tôi không biết nhiều chi tiết.

Sự cố đã được khắc phục bằng cách đổi tên qua lại tệp với sự cố:

MyTemplate.html - đã đổi tên -> MyTemplate2.html - đã đổi tên -> MyTemplate.html

Lưu ý : Ở lần đổi tên đầu tiên, tôi gặp lỗi với dòng " cấu hình nội dung không tìm thấy ", nhưng lần đổi tên thứ hai hoạt động mà không gặp sự cố.

Sau này tôi đã có thể biên dịch dự án thành công.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.