.NET/Nuget 中的 API 和实现依赖项,就像在 Java/Gradle 中一样?

API and implementation dependencies in .NET/Nuget, just like in Java/Gradle?

提问人:domin 提问时间:9/17/2022 更新时间:9/21/2022 访问量:67

问:

场景:我想创建并发布库。

在 Java 世界中:使用 Gradle,我使用 Gradle 插件创建一个项目。我可以使用配置和配置来指定依赖项。此方法具有以下属性:java-libraryapiimplementation

  • 编译库时,将解析直接依赖关系,但仅当编译过程需要传递依赖关系时,才会解析传递依赖关系。这使得解决过程要快得多,但是,在库实际需要运行之前,版本冲突可能会保持隐藏状态。
  • 我的库的使用者也可以从这种行为中受益,因为他们只需要我的库的依赖项来编译他们的库/应用程序。api

在 .NET 世界中:使用 nuget,我个人没有遇到同样的区别。似乎有 A) 只有一种依赖关系(API 和实现之间没有区别),以及 B) 没有与 Java 中的编译和运行时类路径类似的概念。这也意味着,为了编译库,所有依赖关系(直接依赖关系和传递依赖关系)都会被解析,即使其中大多数根本不需要。

:在 .NET 中真的没有类似的区别吗?如果没有,有什么充分的理由吗?

java .net gradle nuget 依赖项解析

评论


答:

0赞 mu88 9/21/2022 #1

由于五天内没有人回答,我想试一试 🙂

我认为 NuGet/.NET 也支持这一点,请参阅此处和此处我可以指定我引用的外部依赖项的哪些内容可以被其他项目/包使用。
使用 和 是控制依赖项资产的非常细粒度的方法。
IncludeAssetsExcludeAssetsPrivateAssets

评论

1赞 domin 9/22/2022
谢谢!:)我也研究过这些,但我认为这是一个不同的用例。在这里,我们选择引用包 X 的部分内容。这对 X 引用的传递依赖关系没有影响——它们都得到了同样的解析。在 Java/Gradle 世界中,这将是更灵活的变体选择,甚至包括与每个变体关联的传递依赖项。但是,此功能仅在 Gradle 中提供,而不是在 Maven 中。