包含重复的“内容”项。默认情况下,.NET SDK包含项目目录中的“内容”项


132

每当我将JavaScript或CSS文件添加到asp.net核心项目中并dotnet run在bash终端中执行时,都会出现以下错误:

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

.NET.Sdk.DefaultItems.targets(188,5):错误:已包含重复的“内容”项。默认情况下,.NET SDK包含项目目录中的“内容”项。您可以从项目文件中删除这些项目,也可以将“ EnableDefaultContentItems”属性设置为“ false”(如果要在项目文件中明确包含这些项目)。有关更多信息,请参见 https://aka.ms/sdkimplicititems。重复项为:'wwwroot / css / BasicQuotation.css'; 'wwwroot / js / BasicQuotation.js'[/mnt/c/Dev/myproject/MyProject/MyProject.csproj]

构建失败。请修复构建错误,然后重新运行。

我可以通过ItemGroup从csproj文件中删除来解决此问题,但我认为这样做效率不高。

这在默认的Visual Studio 2017 ASP.NET Core Web应用程序(.NET Core)模板中发生。我通过右键单击wwwroot> js文件夹将文件添加到我的项目中,然后选择Add > New Item > JavaScript File

这是我的.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
如果将VS2017更新到v15.3后遇到此问题,请确保在此处查看。MS决定默认情况下现在默认包含某些文件夹,例如wwwroot,这意味着它们可能被两次包含。
jao

@jao分享的文章很好地解释了为什么会发生这种情况以及如何解决它。只需直接转到该文章即可。
Pepito Fernandez

Answers:


107

所以我遇到了同样的问题。我不想关闭DefaultCompileItems,因为我知道那不会“解决”问题。因此,我卸载了项目,并在Visual Studio中以文本模式打开了.csproj文件,并看到了这一点。

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

当我注释掉第一个ItemGroup块时,它起作用了。我认为发生的事情是该项目正在添加整个\ images \ friends-eating \文件夹,然后添加每个单独的图像,从而导致重复。

至于自定义css和js,该项目会自动添加wwwroot \ css和wwwroot \ js,因此,如果您添加了单个文件(如wwwroot \ css \ custom-bootstrap-navbar.css),它将被视为重复文件。


<Folder Include="wwwroot\" />对我
有用

3
好吧,我不明白。Visual Studio到底在做什么,为什么?
tnk479 '19

193
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
这样做为我解决了问题,但是实际上使它起作用的是什么?
Rono

@Rono看起来像它在.csproj文件中明确标识了wwwroot文件中的所有文件。例如:i.imgur.com/4SPnQ5h.png
J. Schei,

4
我也为我工作-这是我认为比接受的答案安全得多的方法。
brinch

它也对我有用!禁用DefaultContentItems帮助构建了我的解决方案,但是未显示图像,CSS和其他文件。
布鲁诺·塞拉诺

1
一旦排除了“ wwwroot”,您可能必须单击“解决方案资源管理器”顶部的“显示所有文件”按钮(看起来像是三张纸堆放在一起)才能看到“ wwwroot”文件夹,以便可以将其重新添加进入。我的消失了,直到找到此按钮,我才知道如何找回它。该文件夹将显示为灰色,表示未包括在内。
James Toomey

25

这在我的情况下有效:

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

3
如我对Pinki的回答的评论所述,我不建议将此作为解决方案,因为这可能会导致更多错误。
马特

我实际上遇到了更大的问题,将此选项设置为false。我也建议不要将其设置为false。
卢威提

使Folder完全作为EmbeddedResource元素包括在内的最干净的方法是什么?
约翰·扎布罗斯基

之后,不再包含wwwroot。所以最好不要使用它……
UNeverNo

14

刚才将项目从.NET Core 1.X升级到2.0时,发生了这种情况。这是我的解决方案。

  • 打开xxx.csproj,或右键单击项目
  • 卸载项目
  • 编辑xxx.csproj。

然后删除ItemGroup项,以 <Content Include = "wwwroot\xxxxx"


谢谢!注意:它似乎与最新的Visual Studio版本15.3相关,而与.NET Core 2.0
Vincent V

10

我的问题很接近,但不完全相同。我的错误是这样的:

C:\ Program Files \ dotnet \ sdk \ 2.0.0-preview2-006497 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.NET.Sdk.DefaultItems.targets(285,5):错误:重复的``内容''项被包括在内。默认情况下,.NET SDK包含项目目录中的“内容”项。您可以从项目文件中删除这些项目,也可以将“ EnableDefaultContentItems”属性设置为“ false”(如果要在项目文件中明确包含这些项目)。有关更多信息,请参见https://aka.ms/sdkimplicititems。重复项是:'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。

如果我这样做:

<EnableDefaultContentItems>false</EnableDefaultContentItems>

由于Areas无法识别所有突发事件,因此无法编译。

我的解决方案似乎很奇怪,但是消息告诉我,有重复的文件:

重复项是:'wwwroot \ js \ KOBindings.js'; 'wwwroot \ js \ KOPleaseWait.js'; 'wwwroot \ js \ ProjectTime \ Add.js'; 'wwwroot \ js \ TimeAdmin \ Invoice.js'; 'wwwroot \ js \ TimeAdmin \ PayPeriodTotals.js'

查看我的.csproj文件:

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

这是在整个项目中这些文件被引用的唯一位置(除了它们被加载的位置。)所以短语重复对我来说没有任何意义。但是,这样注释掉这些文件可以解决我的问题:

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

我认为这与2.0.0-preview2-006497我最近安装的有关。

另外,此链接还提到有关全局的讨论。但是没有告诉我那在哪里。它讨论了SDK等。答案是我的自定义.js文件。该链接需要在恕我直言上更新或扩展。希望这对某人有帮助。


很想知道这为什么工作。但是,只是为我工作。=)
Frog Pr1nce

10

链接所述,您可以禁用此行为(自动包含),并通过将其添加到csproj文件中来明确包含所有内容:

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

1
当我将其添加到csproj文件中并删除css / js项目组时,出现以下错误: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 2015年

2
“内容”不是“编译”-是吗?
harveyt

旁注....如果您未明确包含“视图”文件夹,则不会使用此设置发布视图
2014年

我试过了,但是没有用。仍然遇到相同的错误
Pantonis

3

就我而言,我通过从VS中的wwwroot-Directory中删除所有文件来解决此问题。卸载并重新加载项目。用VS复制所有文件。完成了


没有一个最佳的解决方案对我有用,在阅读您的评论之前,我已经做到了这一点,而且这个方法完美无缺!!!我排除了wwwroot,controllers,views文件夹并将其添加回去,现在一切正常!
revobtz

2

其实,Asp.net核心自动包括的内容wwwroot\css\wwwroot\js\并且wwwroot\lib\,位置等等,尽管这一点,如果你的csproj文件中明确包括这些目录的内容,然后这些内容将被复制,从而从你删除的内容csproj文件是更好的办法来摆脱这种错误的。因此,删除以下内容-

  <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
这在将Visual Studio更新到15.3时发生了。为了防止对尚未更新的同事进行更改,我不得不将其添加<PropertyGroup> <EnableDefaultContentItems>false</EnableDefaultContentItems> </PropertyGroup>到.csproj文件中。
1998年

@saluce是的,您是正确的,您也可以在上下文中使用相同的解决方案。选择权取决于开发人员是否要保留EnableDefaultContentItems。它们是两种不同的方法
Mostafiz

我的观点是,我所做的唯一更改是将Visual Studio升级到15.3。我没有对项目进行任何更改,但是在升级之前,不需要此设置。
2002年

2

我的情况是禁用两个默认项以下。

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

1

并非我可以在上面的示例中看到它来帮助其他SO搜索者。

当文件中的<Content Include="xxx" />元素中两次列出相同文件时,也会出现此错误csproj

删除重复项并重建。


1

在Visual Studio 2017 15.3和.NET Core 2.0下,EnableDefaultCompileItems对我不起作用。

我需要将此添加到我的.csproj

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

对我来说(Visual Studio 15.3.4 .NET Framework 4.5.2)EnableDefaultContentItems不起作用,而EnableDefaultCompileItems起作用。
hlovdal

1

我找到了另一种适当的解决方案。

  1. 右键单击您的mvc项目,然后单击“编辑csproj”。
  2. 如果您要在wwwroot下添加文件,只需将其移动到wwwroot下的文件夹,我们称其为“主题”

并删除csproj文件中的所有内容标签(如果存在),例如;

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

并且仅添加此;

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

因此,csproj文件应如下所示:

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

这样,我认为您正在将所有文件添加到主题文件夹下。因此,不要一一列举它们,否则会引起一些错误。


1

.NET核心项目

如果您在类库中,则可能需要从csproj中删除所有Compile / Content元素,因为这些元素会自动包含在内。

<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

排除和包括具有重复错误的文件夹对我有用!希望这对别人有帮助!


0

我认为禁用“ EnableDefaultContentItems”不是最好的选择。手动cs-Proj编辑文件也不是一个好主意。

因此,对于我们的构建服务器管道,我们编写了一个非常小的工具,它将自动删除所有重复的条目: dotnet-csproj-cleaner

作为持续集成管道中的第一步,我们在Docker下运行它。


看起来不错,但是为什么它仅限于具有wwwroot路径的项目?
约翰·扎布罗斯基

这是标准的VS内容位置,默认情况下包含路径。如果您需要更复杂的解决方案-请随时提交请求。通过添加其他命令行参数应该非常容易。谢谢。
anakod

0

我只有一个文件时遇到了同样的问题,其他所有文件都在工作(我的所有模板都直接存储在wwwroot / content中)。该项目不是我创建的,所以我不知道很多细节。

通过使用该问题来回重命名文件来解决此问题:

MyTemplate.html-重命名-> MyTemplate2.html-重命名-> MyTemplate.html

注意:第一次重命名时出现错误,内容类似于“ 未找到内容配置 ”,但是第二次重命名没有问题。

之后,我能够成功编译该项目。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.