【发布时间】:2019-06-27 17:28:09
【问题描述】:
我创建了一个 .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 Standard 库中使用 2.2.0 版本引用“Microsoft.Extensions.DependencyInjection.Abstractions”会阻止 2.1 版本的 .NET Core 应用程序使用该应用程序。这是正确的吗?
【问题讨论】:
-
我将尝试重现此内容,以便更清楚发生了什么。你的 NuGet 包是公开的吗?
-
ASP.NET Core 版本无关紧要。重要的是 package 的版本。面向 ASP.NET Core 2.1 的项目将包含 2.1 版本的 Microsoft.Extensions 包。如果您自己的包需要 2.2 扩展,则 Web 应用程序也必须升级到最新版本。如果您不想强制 Web 应用更新,请使用 2.1 扩展
-
不幸的是,它不是。我计划创建一个简单版本的包并将其安装在 2.1 和 2.2 应用程序中。我查看了一些 GitHub 项目,它们具有添加到 IServiceCollection (MediatR) 的类似包,它们引用了抽象包 2.0。我个人在 2.1 和 2.2 应用程序中都使用了 Mediatr 包,没有问题,所以我们的特定项目可能有问题。
-
绑定重定向应该允许 Web 应用程序仅使用
Microsoft.Extensions.DependencyInjection.Abstractions的升级版本。 Web 应用程序的开发人员可能不想这样做,或者至少在没有先测试的情况下不想这样做
标签: .net .net-core .net-standard-2.0