本文介绍如何通过visual sutdio 2019 创建同时支持多个版本的类库,下面以意见建立号的.NET5类库为例,将类库同时支持.NET5和.NET4.5其他类库操作类似。
首先我们找到需要多版本支持的.net类库程序,右键项目文件选择“编辑项目文件”,.csproj文件有类似下面的内容:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
想要类库支持多个.net版本,需要将上面 TargetFramework改成 TargetFrameworks,然后加入其他的类库版本,如下
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net5.0;net45</TargetFrameworks>
</PropertyGroup>
</Project>
项目文件编辑保存后,类库引用如下图
.net不同版本函数和类库会有不同,程序中需要根据不同的类库版本进行编译,可以使用宏的方式,针对不同的版本进行设置
#if NET45
Console.WriteLine("Target framework: .NET Framework 4.5");
#else
Console.WriteLine("Target framework: .NET 5");
#endif
另一种可以通过定义约束的方式针对不同的.NET版本进行区别开发
<PropertyGroup Condition=" '$(TargetFramework)' == 'net45' ">
<DefineConstants>NETALL</DefineConstants>
</PropertyGroup>
程序中同样采用宏的方式
#if NETALL
int num;
#else
long num;
#endif
同时,还可以针对不同的版本进行引用类库的设置
<ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
<PackageReference Include="System.ComponentModel">
<Version>4.3.0</Version>
</PackageReference>
</ItemGroup>
版本范围
Notation | 应用的规则 | 描述 |
1.0 | x ≥ 1.0 | 最低版本(包含) |
(1.0,) | x > 1.0 | 最低版本(独占) |
[1.0] | x == 1.0 | 精确的版本匹配 |
(,1.0] | x ≤ 1.0 | 最高版本(包含) |
(,1.0 | x < 1.0 | 最高版本(独占) |
[1.0,2.0] | 1.0 ≤ x ≤ 2.0 | 精确范围(包含) |
(1.0,2.0) | 1.0 < x < 2.0 | 精确范围(独占) |
[1.0,2.0) | .0 ≤ x < 2.0 | 混合了最低版本(包含)和最高版本(独占) |
(1.0) | 无效 | 无效 |