特别声明:这篇文件哪有什么技术含量,基本等价于"Hello World"。老鸟们请自觉飞走~
历经整天114KB/S的磨难,终于把.NET8以及Visual Studio17.8都升级安装好了。接下来终于可以搞事情了!本来想直奔主题,开搞NativeAOT的。无奈最近有点忙,状态没上来。可能要推迟了。反正圈内的大佬们都纷纷交了卷子,我输在了起跑线上,于是我现在心态闲庭信步,甚至随时可能摆烂。
嗯,顺带给自己点安慰:慢工出细活。虽说如此,不代表我什么都没做。百忙之中,我还是实战体验了一把.NET8的。将一个就项目改成.NET8,然后发布打包。尽管我的探索没什么技术含量,基本等价“Hello World”,但是好歹也有点东西能给分享一下,给博客注点水。实验的结果还是令我挺满意的,对.NET8的其他方便的期待有增加了几分。
OK,先话扯到这,我们正式开车!
1、改工程配置
这一步其实没什么好说,但又不能跳过。
之前玩过.NET Core3.1 到.NET7这类项目升级的朋友,应该会轻车驾熟地打开项目后缀为.csproj的工程文件。然后,把TargetFramework
内容改为net8.0
。
<TargetFramework>net8.0</TargetFramework>
这样就搞定了!
2、项目打包
我习惯用脚本打包,脚本内容如下:
set projPath=.\YSC.VueHost
set projFile=%projPath%\YSC.WebHost.csproj
set outPath=.\vuehost-win
dotnet publish %projFile% -o %outPath% -c Release -r win10-x64 /p:PublishSingleFile=true /p:PublishTrimmed=true
有经验的朋友应该看得出点门道来,我准备打包生成的是一个单文件应用,也就是将所有依赖打包到一个可执行文件中。这样的好处不言而喻,用户的操作系统不需要安装.NET运行环境便可很丝滑的跑起来。虽然,生成的exe包size会膨胀不少,但是应用分发起来确实省事,利大于弊。因此,客户端应用这种打包方式属于很普遍的做法。
我的打包脚本执行,出了点意外。报错了~
C:\Program Files\dotnet\sdk\8.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targe
ts(90,5): error NETSDK1083: 无法识别指定的 RuntimeIdentifier“win10-x64”。有关详细信息,请参阅 https://aka.ms/netsdk1083。
[Y:\Shared\develop\devops\VueHost_V2\YSC.VueHost\YSC.WebHost.csproj]
.NET7及以下下版本都能畅行无阻无往不利的打包脚本,竟在载在了初出茅庐的.NET8手上了!不过,咱也不慌,胜败乃是兵家常事。查阅官方文档,很快就找到了解决的办法。
https://learn.microsoft.com/zh-cn/dotnet/core/compatibility/core-libraries/8.0/runtimeidentifier
以上文档内容写道:
从 .NET 8 开始,该值是为其生成了运行时的 RID。 这意味着对于运行时的可移植生成(所有 Microsoft 提供的生成),该值不特定于版本且不特定于发行版。 例如,在 Windows 11 上,该值为 win-x64,在 Ubuntu 20.04 上,该值为 linux-x64。 对于不可移植的生成(源生成),生成将设置一个可以具有版本和发行版的生成 RID,该值就是返回的 RID。
哦,原来是参数不一样了。于是我的脚本改成了:
set projPath=.\YSC.VueHost
set projFile=%projPath%\YSC.WebHost.csproj
set outPath=.\vuehost-win
dotnet publish %projFile% -o %outPath% -c Release -r win-x64 /p:PublishSingleFile=true /p:PublishTrimmed=true
顺利执行,完成打包!
结果分析对比
.NET8编译打包如上图,打包生成的exe文件,大小18M。嗯,不错,非常不错。可是为什么说不错呢?不着急,我们找个参照物来做一下对比,大家就可以直观感受到了。以下是.NET6打包生成的。
.NET6编译打包
38M那么大,两者差距一倍有余呢!有对比才有点赞,我们的.NET8确实是更优秀的。值得一说,官方公布出来的数据跟这差不多,并没有虚标。
这个结果,对我继续探索研究.NET8其他功能,又增加了几分动力和期许了。
网友评论