.NET Standard 2.0 - Which Microsoft.Extensions.DependencyInj



>我创建了一个 .NET Standard 2.0 类库,该类库具有将服务注册添加到 IServiceCollection 实例的扩展方法。像这样:

using Microsoft.Extensions.DependencyInjection;
namespace Cache.Extensions
{
public static class Extensions
{
public static IServiceCollection AddCacheServices(this IServiceCollection services)
{
services.AddTransient<IMyService, MyService>();
return services;
}
}
}

为了引用类型"IServiceCollection",系统提示我安装"Microsoft.Extensions.DependencyInjection.Abstractions"包。版本 2.2.0 已安装到我的 .NET 标准库中。当我为我的库创建一个 NuGet 包并且用户尝试将其安装在他们的 ASP.NET Core 2.1 Web 应用程序中时,他们收到一个错误,指示他们必须将"Microsoft.Extensions.DependencyInjection.Abstractions"版本与版本 2.1 或类似内容一起使用。这让我想到安装的"Microsoft.Extensions.DependencyInjection.Abstractions"包的版本应该与.NET Core版本匹配。这是对的吗?我假设 .NET 包版本应该与 .NET Core 应用程序的版本匹配。

因此,这意味着在 .NET 标准库中引用 2.2.0 版本的"Microsoft.Extensions.DependencyInjection.Abstractions"会阻止版本为 2.1 的 .NET Core 应用程序使用该应用程序。这是对的吗?

创建 ASP.NET Core 2.1 Web 应用程序时,会得到如下所示的项目文件:

<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
</Project>

NuGet 包版本 2.1.11 的Microsoft.AspNetCore.App依赖于Microsoft.Extensions.DependencyInjection,具有显式的版本约束"(>= 2.1.1 &&<2.2.0)"。

如果将依赖项直接添加到以下 Web 应用程序:

<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version=">= 2.2.0" />

然后你最终会得到一个警告(而不是错误):

Detected package version outside of dependency constraint: Microsoft.AspNetCore.App 2.1.1 requires
Microsoft.Extensions.DependencyInjection.Abstractions (>= 2.1.1 && < 2.2.0)
but version Microsoft.Extensions.DependencyInjection.Abstractions 2.2.0 was resolved.

现在我怀疑这很好...但是,最好使库依赖于包含所需所有功能的依赖项注入包的最早版本(在同一主要版本中)。不幸的是,Microsoft.AspNetCore.App 这里的约束有一个上限 - 固定到特定的次要版本没有多大意义(IMO),因为 2.2.0应该与 2.1.x 兼容,如果正确遵循 SemVer。尽管如此,约束仍然存在,这就是导致警告的原因。

如果 2.0.0(依赖注入抽象包)包含您需要的所有内容,我会使用它。每个 ASP.NET Core Web 应用程序都将使用它想要的版本,大于或等于 2.0.0,并且对于多个版本的 ASP.NET Core 应该都很好,没有警告。

是的,我认为这是正确的。 恕我直言,如果您使用另一个具有 .net 核心 2.1 或 2.2 的包,您的 NuGet-Package 不是 .Net 标准 2.0。 请参阅此处: [在此处输入链接描述][https://learn.microsoft.com/de-de/dotnet/standard/net-standard]

.Net 标准 2.0 也可以与 .net Framework 4.6.1 一起使用,但如果使用的是 .net core 包,则不会运行。因此,您的包与 .net 标准不兼容。

相关内容

  • 没有找到相关文章

最新更新