如何排除 ASP.NET Core 中的项目依赖项?

How do I exclude project dependencies in ASP.NET Core?

在我使用 ASP.NET Core 2.0 的解决方案中,我有三个项目:A、B 和 C。我希望项目依赖项的行为是 A 依赖于 B,B 依赖于 C 和 C没有依赖关系。

在 ASP.NET MVC 5 中,这很容易通过设置 A 引用 B 和 B 引用 C 来实现。但是在 Core 中,当一个项目依赖于另一个项目时,它也会继承该项目的所有依赖项.在这种情况下,这意味着 A 继承了 B 对 C 的依赖性。这种依赖性可以在 Visual Studio 的解决方案资源管理器中看到:.

我想让A依赖B,但是none个B的依赖,像这样:.

有谁知道如何通过 Visual Studio 或 .csproj 文件实现我想要的行为?谢谢!

我想通了。

为了让项目 A 引用 B 和 B 引用 C,但 A 引用 C,我将 PrivateAssets="All" 添加到 B 对 C 的 ProjectReference,例如所以:

在B.csproj

<ItemGroup>
  <ProjectReference Include="..\C\C.csproj" PrivateAssets="All" />
</ItemGroup>

此设置使 C 的引用私有,因此它仅存在于 B 中。现在引用 B 的项目将不再引用 C。

来源:https://github.com/dotnet/project-system/issues/2313

如果您想要与 .NET Framework 和 ASP.NET MVC 5 项目中相同的行为,那么您可以在根文件夹中创建此 Directory.Build.props 文件。

<Project>
  <PropertyGroup>    
    <DisableTransitiveProjectReferences>true</DisableTransitiveProjectReferences>
  </PropertyGroup>
</Project>

如果你想要更详细的解释,你可以阅读我的另一个类似问题。