【问题标题】:How do I exclude project dependencies in ASP.NET Core?如何在 ASP.NET Core 中排除项目依赖项?
【发布时间】:2018-02-11 16:15:30
【问题描述】:

在我使用 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,但没有 B 的依赖项,例如:。

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

【问题讨论】:

  • 2.0 的新特性之一不就是当你构建项目的发布版本时,只引用它使用的依赖项吗?虽然我不确定它是否能完全解决你的问题,但你可以看看它是如何工作的。
  • @JohanHerstad 谢谢,我已经研究过了,但认为它不会解决我的问题。我想以这种方式设置我的项目的最大原因之一是它甚至不会在“显示潜在修复”中建议 using ProjectC 语句。这将使从事项目 A 的任何开发人员都无法意外引用项目 C。

标签: c# asp.net-core dependencies projects-and-solutions asp.net-core-2.0


【解决方案1】:

我想通了。

为了让项目 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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多