Sin*_*222 1 .net .net-core .net-standard-2.0
我创建了一个.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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
为了引用类型“ 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应用程序。它是否正确?
当创建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>
Run Code Online (Sandbox Code Playgroud)
的Microsoft.AspNetCore.AppNuGet包版本2.1.11取决于Microsoft.Extensions.DependencyInjection,以“(> = 2.1.1 && <2.2.0)”的显式版本约束。
如果直接向以下Web应用程序添加依赖项:
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version=">= 2.2.0" />
Run Code Online (Sandbox Code Playgroud)
那么您最终会得到一个警告(而不是错误):
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.
Run Code Online (Sandbox Code Playgroud)
现在,我怀疑那很好……但是,让您的库依赖于包含所有所需功能的依赖项注入程序包的最早版本(在同一主要版本内)会更好。不幸的是,Microsoft.AspNetCore.App在此约束中具有上限-固定到特定的次要版本(IMO)并没有多大意义,因为SemVer如果2.2.0 应该与2.1.x兼容已正确遵循。尽管如此,约束仍然存在,这就是引起警告的原因。
如果(依赖注入抽象包的)2.0.0包含您需要的所有内容,我将使用它。每个ASP.NET Core Web应用程序都将使用所需的版本,大于或等于2.0.0,并且对于多个版本的ASP.NET Core来说都应该很好,而不会发出警告。
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |