包括重复的“内容”项目。 .NET SDK默认包含项目目录中的“内容”项目

每当我添加一个JavaScript或CSS文件到我的asp.net核心项目,我执行dotnet run在我的bashterminal,我得到以下错误:

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

构build失败。 请修复构build错误并再次运行。

我可以通过从我的csproj文件中删除ItemGroup来解决这个问题,但我不认为这是非常有效的。

这发生在默认的Visual Studio 2017 ASP.NET核心Web应用程序(.NET Core)模板中。 我通过右键单击wwwroot> js文件夹将文件添加到我的项目,然后selectAdd > 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> 

所以我遇到了同样的问题。 我不想closuresDefaultCompileItems,因为我知道这不会“解决”问题。 所以我卸载了我的项目,并在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和WWW根\ JS,所以如果你有一个单独的文件添加(如wwwroot \ CSS \自定义引导-ARBbar.css)它会算作一个重复。

  1. 在解决scheme资源pipe理器中单击“显示所有文件
  2. 右键点击“wwwroot”select“从项目排除”
  3. 右键点击“wwwroot”select“包含在项目中”

这在我的情况下工作:

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

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

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.csproj]

如果我这样做:

 <EnableDefaultContentItems>false</EnableDefaultContentItems> 

它不会编译,因为所有突然的Areas都不会被识别。

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

重复的项目是:“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文件。 恕我直言,该链接需要更新或扩大。 希望这有助于某人。

它刚刚发生,当我从.NET Core 1.X升级到2.0的项目。 这是我的解决scheme。

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

然后删除以<Content Include = "wwwroot\xxxxx"开头的ItemGroup项目

如链接所示 ,您可以禁用此行为(自动包含),并将所有内容明确包含在您的csproj文件中:

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

在我的情况下,我通过删除VS中的wwwroot-Directory中的所有文件来解决这个问题。 卸载并重新加载项目。 将所有文件复制回VS. 完成

实际上,Asp.net核心自动包含来自wwwroot\css\wwwroot\js\wwwroot\lib\ location的内容,所以尽pipe如此,如果您的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> 

不是我可以在上面的例子中看到它,以帮助其他SOsearch者..

当您在csproj文件中的<Content Include="xxx" />元素中列出两次相同的文件时,也可以得到此错误。

删除重复和重build。

在Visual Studio 2017 15.3和.NET Core 2.0下,EnableDefaultCompileItems不适用于我。

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

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

我find了一个不同的解决scheme。

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

用这种方法,我想你是添加主题文件夹下的所有文件。 所以不要把他们一个接一个地包括在内。

排除和包括具有重复错误的文件夹为我工作! 希望这可以帮助别人!

我认为禁用“EnableDefaultContentItems”不是最好的select。 手动cs-Proj文件编辑也不是什么好主意。

所以对于我们的构build服务器pipe道,我们写了一个非常小的工具,它会自动删除所有重复的条目: dotnet-csproj-cleaner

我们在Docker下运行它作为持续集成pipe道中的第一个构build步骤。

.NET核心项目

如果您在类库中,可能需要从csproj中删除所有编译/内容元素,因为这些元素是自动包含的。

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