包含重复的"内容"项目..NET SDK默认包含项目目录中的"内容"项

jao*_*jao 115 asp.net asp.net-core-mvc asp.net-core

每当我向我的asp.net核心项目添加javascript或css文件并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核心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>
Run Code Online (Sandbox Code Playgroud)

小智 180

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'
Run Code Online (Sandbox Code Playgroud)

  • 也为我工作 - 在我看来,这比接受的答案更安全. (4认同)
  • 这样做解决了我的问题,但实际发生了什么使它工作? (2认同)
  • 排除“wwwroot”后,您可能需要单击“解决方案资源管理器”顶部的“显示所有文件”按钮(看起来像 3 张乱七八糟的纸)以查看“wwwroot”文件夹,以便将其添加回来在。我的消失了,直到找到这个按钮我才知道如何取回它。该文件夹将显示为灰色,表示它不包括在内。 (2认同)

Pin*_*ski 98

所以我遇到了同样的问题.我不想关闭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>
Run Code Online (Sandbox Code Playgroud)

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

至于自定义css和js,项目自动添加wwwroot\css和wwwroot\js,所以如果你添加了一个单独的文件(如wwwroot\css\custom-bootstrap-navbar.css),它将被视为重复.

  • 好吧,所以我不明白。Visual Studio 到底在做什么,为什么? (4认同)

har*_*eyt 22

这适用于我的情况:

 <PropertyGroup>
    ...
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

  • 正如我对Pinki的回答所述,我不建议将其作为解决方案,因为这可能会导致更多错误. (3认同)

wtf*_*512 13

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

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

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


Gra*_*zer 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.csproj]

如果我这样做:

<EnableDefaultContentItems>false</EnableDefaultContentItems>
Run Code Online (Sandbox Code Playgroud)

它不会编译,因为突然之间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>
Run Code Online (Sandbox Code Playgroud)

这是整个项目中唯一的位置,这些文件是引用的(除了它们被加载的位置.)因此,复制短语对我没有任何意义.但是,将这些文件注释掉,照顾我的问题:

<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>
Run Code Online (Sandbox Code Playgroud)

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

此外,这个链接提到了有关globs的讨论.但是不告诉我它在哪里.它谈论SDK等.答案是我的自定义.js文件.需要在恕我直言上更新或扩展该链接.希望这有助于某人.


Dmi*_*try 7

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

<PropertyGroup>
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

  • "内容"不是"编译" - 不是吗? (2认同)