Microsoft.AspNetCore.App-版本控制/是否应在非ASP.NET类库中引用它?

时间:2019-03-14 11:52:05

标签: c# asp.net-core .net-core

我正在尝试找出使用Microsoft.AspNetCore.App元数据包的正确方法。

Visual Studio正在构建报告,我不应该为Microsoft.AspNetCore.App元包指定版本。

<PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.1" />

所以我将以上内容替换为:

<PackageReference Include="Microsoft.AspNetCore.App" />

下一个问题是,我的项目所依赖的任何类库项目或程序包都包含对包的版本化引用,这些包也包含在Microsoft.AspNetCore.App元包中,因为存在版本冲突。

<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.1.1" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.1.1" />

所以我也删除了这些引用上的版本:

<PackageReference Include="Microsoft.Extensions.Configuration" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json"  />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" />

现在,当我运行dotnet restore时,我看到一条警告:

<Project> does not provide an inclusive lower bound for dependency 
Microsoft.Extensions.Configuration. An approximate best match of 
Microsoft.Extensions.Configuration 1.0.0 was resolved.

因此现在可以构建该应用程序,但是正在解决旧的且可能已过时的软件包版本。

为所有这些软件包维护较低绑定版本似乎有点开销。

阻力最小的途径似乎是仅引用Microsoft.AspNetCore.App软件包(未版本化)来代替meta软件包中包含的任何软件包。但是,然后我隐式地引用了很多不必要的东西(目前有150个软件包)。我可能想在不面向Web的项目中重用类库,因此所有引用的包似乎效率低下。另外,我是否认为Microsoft.AspNetCore.App的较新版本在将来构建时可能会破坏我的应用程序?

2 个答案:

答案 0 :(得分:3)

我认为您可能希望遵守NuGet Version ranges and wildcards表示法。

在提及软件包依赖项时,NuGet支持使用间隔符号指定版本范围,总结如下:

+-----------+---------------+-------------------------------------------------------+
| Notation  | Applied rule  |                      Description                      |
+-----------+---------------+-------------------------------------------------------+
| 1.0       | x ≥ 1.0       | Minimum version, inclusive                            |
| (1.0,)    | x > 1.0       | Minimum version, exclusive                            |
| [1.0]     | x == 1.0      | Exact version match                                   |
| (,1.0]    | x ≤ 1.0       | Maximum version, inclusive                            |
| (,1.0)    | x < 1.0       | Maximum version, exclusive                            |
| [1.0,2.0] | 1.0 ≤ x ≤ 2.0 | Exact range, inclusive                                |
| (1.0,2.0) | 1.0 < x < 2.0 | Exact range, exclusive                                |
| [1.0,2.0) | 1.0 ≤ x < 2.0 | Mixed inclusive minimum and exclusive maximum version |
| (1.0)     | invalid       | invalid                                               |
+-----------+---------------+-------------------------------------------------------+

因此,不要完全删除Version属性,而要使用范围或通配符,例如:

  

最低版本,包括

<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.1" />

参考:How to correct dotnet restore warning NU1604, does not contain an inclusive lower bound?

需要一些配置,我希望微软在RTM 3.0中使用向导来更新所有依赖关系树...这是6个月前的一个项目,其中包含对Microsoft.AspNetCORE.Mvc的引用:

enter image description here

这是我正在从事的项目,我必须明确引用某些程序包(要获取ActionResult,必须添加2个特定的引用。):

enter image description here

需要时提供细粒度的库,或者具有范围/通配符API更新或完整的套件和cabo​​odle的面向未来的模块化。

答案 1 :(得分:1)

答案似乎在答复中。选择以下策略之一:

  1. 不引用Microsoft.AspNetCore.App元软件包,而是引用您需要的特定软件包。最适合分布式库。

  2. 引用Microsoft.AspNetCore.App并带有特定版本,并确保在整个解决方案中该版本相同。它要求您拥有整个堆栈,因此它可能仅对单个解决方案中具有许多相关项目的整体式组件有用。