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

Posted

技术标签:

【中文标题】包含重复的“内容”项目。默认情况下,.NET SDK 包含项目目录中的“内容”项【英文标题】:Duplicate 'Content' items were included. The .NET SDK includes 'Content' items from your project directory by default 【发布时间】:2017-04-10 14:30:18 【问题描述】:

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

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

构建失败。请修复构建错误并重新运行。

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

这发生在默认的 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>

【问题讨论】:

如果您在将 VS2017 更新到 v15.3 后遇到此问题,请务必查看 here。 MS 决定现在默认包含某些文件夹,例如 wwwroot,这意味着它们可能被包含两次。 @jao 分享的文章很好地解释了为什么会发生这种情况以及如何解决它。直接看那篇文章。 更多信息EnableDefaultContentItems:***.com/a/46984128/67824 【参考方案1】:
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'

【讨论】:

这样做解决了我的问题,但究竟发生了什么让它起作用? @Rono 看起来它明确标识了 .csproj 文件中 wwwroot 文件中的所有文件。例如:i.imgur.com/4SPnQ5h.png 也为我工作 - 在我看来,这是一种比接受的答案更安全的方法。 它也对我有用!禁用 DefaultContentItems 有助于构建我的解决方案,但没有显示图像、CSS 和其他文件。 排除“wwwroot”后,您可能需要单击解决方案资源管理器顶部的“显示所有文件”按钮(看起来像 3 张纸乱堆)才能看到“wwwroot” " 文件夹,以便您可以将其重新添加。我的消失了,直到找到此按钮,我才知道如何取回它。该文件夹将显示为灰色,表示它不包含在内。【参考方案2】:

所以我遇到了同样的问题。我不想关闭 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),它将计为重复。

【讨论】:

这个&lt;Folder Include="wwwroot\" /&gt; 为我工作,但视觉工作室稍后撤消它:( 好吧,我不明白。视觉工作室到底在做什么,为什么?【参考方案3】:

这在我的情况下有效:

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

【讨论】:

正如我对 Pinki 回答的评论中所述,我不会将此作为解决方案,因为这可能会导致更多错误。 实际上我在将此选项设置为 false 时遇到了更大的问题。我还建议不要将其设置为 false。 将文件夹完全包含为 EmbeddedResource 元素的最简洁方法是什么? 在此 wwwroot 不再包含之后。所以最好不要使用这个......【参考方案4】:

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

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

然后删除以&lt;Content Include = "wwwroot\xxxxx"开头的ItemGroup项

【讨论】:

谢谢!注意:它似乎与最新的 Visual Studio 版本 15.3 相关,而不是直接与 .NET Core 2.0 相关【参考方案5】:

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

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

【讨论】:

当我将它添加到我的 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. “内容”不是“编译”——不是吗? 附注....如果您没有明确包含您的 Views 文件夹,它将不会使用此设置发布您的视图 我试过了,但没用。仍然得到同样的错误【参考方案6】:

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

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 将无法识别。

我的解决方案,看起来很奇怪,但消息告诉我,有重复的文件:

重复的项目是:'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>

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

<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 有关。

另外,link 提到了关于球体的讨论。但不告诉我那在哪里。它谈到了 SDK 等。然而答案是我自定义的.js 文件。该链接需要在恕我直言上更新或扩展。希望这对某人有所帮助。

【讨论】:

很想知道为什么会这样。但是,只是为我工作。 =)【参考方案7】:

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

【讨论】:

没有一个最适合我的解决方案我在阅读您的评论之前就这样做了,这完美无瑕!!!我排除了 wwwroot、控制器、视图文件夹并将它们添加回来,现在一切正常!【参考方案8】:

实际上,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>

【讨论】:

这发生在我将 Visual Studio 更新到 15.3 时。为了防止对尚未更新的同事进行重大更改,我不得不将 &lt;PropertyGroup&gt; &lt;EnableDefaultContentItems&gt;false&lt;/EnableDefaultContentItems&gt; &lt;/PropertyGroup&gt; 添加到 .csproj 文件中。 @saluce 是的,您是对的,您也可以在您的上下文中使用相同的解决方案。选择取决于开发人员是否要保留EnableDefaultContentItems。他们是两种不同的方法 我的意思是我所做的唯一更改是将 Visual Studio 升级到 15.3。我没有对我的项目进行任何更改,但在升级之前,不需要此设置。【参考方案9】:

.NET Core 项目

如果您在类库中,可能需要从您的 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>

【讨论】:

【参考方案10】:

我不能在上面的示例中看到它,以帮助其他 SO 搜索者..

当您在 &lt;Content Include="xxx" /&gt; 文件中的 &lt;Content Include="xxx" /&gt; 元素中列出了两次相同的文件时,您也会收到此错误。

删除重复并重建。

【讨论】:

【参考方案11】:

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

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

【讨论】:

【参考方案12】:

在 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 起作用。【参考方案13】:

我找到了另一个合适的解决方案。

    右键单击您的 mvc 项目,然后单击编辑 csproj。 如果您要在 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" />
...

这样,我认为您正在添加主题文件夹下的所有文件。所以不要一一包括它们会出现一些错误。

【讨论】:

【参考方案14】:

排除和包含重复错误的文件夹对我有用!希望这对其他人有帮助!

【讨论】:

【参考方案15】:

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

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

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

【讨论】:

看起来不错,但为什么仅限于具有 wwwroot 路径的项目? 这是标准的 VS 内容位置,默认包含路径。如果您需要更复杂的解决方案 - 请随时提交拉取请求。通过添加额外的命令行参数应该很容易。谢谢。【参考方案16】:

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

问题已通过来回重命名有问题的文件得到解决:

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

注意:在第一次重命名时,我遇到了类似于“找不到内容配置”的错误,但第二次重命名没有问题。 p>

在此之后我能够成功编译项目。

【讨论】:

【参考方案17】:

我刚刚开始,当我尝试将 wwwroot 文件夹从 Web 应用程序模板复制到使用 API 模板创建的项目时出现此错误。删除引导程序为我解决了它,这很好,因为我只需要 jquery。

【讨论】:

【参考方案18】:

所以对我有用的是在解决方案资源管理器中单击有问题的文件并选择“从项目中排除”。然后使用“包含在项目中”重新添加。

【讨论】:

【参考方案19】:

尽管我已尽职尽责以确保遵循他们推荐的程序,但我之前写的所有答案都没有为我解决“重复”错误。

对我来说,当我尝试在 Nuget 包管理器中将我的 WinUI 3 应用程序的 SDK 从 Windows App SDK 0.8 升级到 1.0 时,出现了“重复内容”问题。当我这样做时,我的项目开始在每次编译时产生这个错误,我尝试执行其他人建议的排除/包含方法,但无济于事。

我花了大约 8 个小时才找到罪魁祸首,这是对我仍然在 Windows App SDK 0.8 上的另一个 WinUI 库项目的引用。一旦我将另一个 WinUI 库项目升级到 SDK 1.0,这个错误就消失了。

把这个答案留在这里,以防它帮助其他人。

【讨论】:

以上是关于包含重复的“内容”项目。默认情况下,.NET SDK 包含项目目录中的“内容”项的主要内容,如果未能解决你的问题,请参考以下文章

文件操作

我可以在没有 Visual Studio 的情况下开发 .net 项目吗,如果可以,.net 框架是成本还是免费软件 [重复]

如何在不包含节点模块文件夹的情况下将我的 React 项目上传到 GitHub [重复]

iOS学习笔记——文件操作(NSFileManager)

使用关键字“ref”传递类对象有啥用?默认情况下,它们是通过引用传递的[重复]

默认情况下,Perl 不包含 @INC 中的当前目录吗?