Closed feast107 closed 1 month ago
在默认情况下,.NET会对框架进行自适应,如当前项目框架定向为 .NET Framework4.0 时,他会自动兼容向上所有的框架,即4.0-4.8, 在中对框架全声明一般用于对于不同框架的不同编译(宏控制)以及区别Nuget包引用。现在.NET有三族:.NET Standard, .NET Framework, .NET,.NET Standard 完全支持 .NET, 可参考:(.NET Standard版本族与兼容关系),
则 TargetFrameworks 声明为
TargetFrameworks
<TargetFrameworks>netstandard2.0;net35</TargetFrameworks>
即可兼容所有的框架
接着对 .NET Standard2.0 引用 System.Drawing.Common 即可对 .NET Standard 和 .NET 族安装该包
System.Drawing.Common
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'"> <PackageReference Include="System.Drawing.Common" /> </ItemGroup>
System.Text.Json
自进入 .NET 以来,微软就已经对 Json 序列化进行了优化,以 Newtonsoft.Json 为参照推出了 System.Text.Json,在 .NET 族,他是内置的。在近乎一致的API风格下,后者拥有更好的性能,更重要的是在 .NET8.0 下支持 NativeAOT,它的作用不言而喻。进行迁移也不需要太多成本:
Newtonsoft.Json
NativeAOT
public static class SerializeExtension{ public static string Serialize<T>(this T target){ #if NETSTANDARD20 return System.Text.Json....Serialize(target); #else return Newtonsoft.Json...SerializeObject(target); #endif } }
想必看到这段,迁移的方案就已经很明了了。
通常情况下,一个存在Native交互的库会发布多个Nuget包,分为包含托管代码和PInvoke的包,以及实际Native依赖对应系统和架构的包这两种。本库的包是引用和Native打包在一起的。当然从现在的状况来看,本地推理、显卡加速似乎确实只有win-x64这一种环境,但是分包的优点是有利于构建时进行管理,按需对程序集进行组合和剪裁,避免臃肿。
谢谢你的建议。
框架自适应
在默认情况下,.NET会对框架进行自适应,如当前项目框架定向为 .NET Framework4.0 时,他会自动兼容向上所有的框架,即4.0-4.8, 在中对框架全声明一般用于对于不同框架的不同编译(宏控制)以及区别Nuget包引用。现在.NET有三族:.NET Standard, .NET Framework, .NET,.NET Standard 完全支持 .NET, 可参考:(.NET Standard版本族与兼容关系),
则
TargetFrameworks
声明为即可兼容所有的框架
接着对 .NET Standard2.0 引用
System.Drawing.Common
即可对 .NET Standard 和 .NET 族安装该包System.Text.Json
自进入 .NET 以来,微软就已经对 Json 序列化进行了优化,以
Newtonsoft.Json
为参照推出了System.Text.Json
,在 .NET 族,他是内置的。在近乎一致的API风格下,后者拥有更好的性能,更重要的是在 .NET8.0 下支持NativeAOT
,它的作用不言而喻。进行迁移也不需要太多成本:想必看到这段,迁移的方案就已经很明了了。
分包?为跨平台做准备?
通常情况下,一个存在Native交互的库会发布多个Nuget包,分为包含托管代码和PInvoke的包,以及实际Native依赖对应系统和架构的包这两种。本库的包是引用和Native打包在一起的。当然从现在的状况来看,本地推理、显卡加速似乎确实只有win-x64这一种环境,但是分包的优点是有利于构建时进行管理,按需对程序集进行组合和剪裁,避免臃肿。