77百科网
当前位置: 首页 生活百科

net部署过程(我将20年前开发的操作系统迁移到)

时间:2023-07-15 作者: 小编 阅读量: 1 栏目名: 生活百科

五年前,我将代码转移到了GitHub上,同时将项目移植到了.NETCore2.0。在本文中,我想尝试一下能否利用.NET升级助手,将这个已有20年历史的项目搬到.NET6上运行。这项功能已经内置到.NET6中,后面会用到。考虑到.NET已存在,不需要额外安装,这个结果已经很优秀了。当年为学校编写的.NET1.1现在都移植到了.NET6.0上,而且还能跨平台,自带运行时,而且只包含一个仅有11MB的EXE文件。

作者 | Scott Hanselman

译者 | 弯月

出品 | CSDN(ID:CSDNnews)

早在2001年,我用C#为学校的一门300系列的操作系统课程编写了一个微型虚拟操作系统,后来在2002年将其移植到了VB.NET。这些都是在.NET Core出现之前的代码,基于Windows早期的.NET 1.1或2.0。

五年前,我将代码转移到了GitHub上,同时将项目移植到了.NET Core 2.0。当时这个项目已经有15年历史了,所以这个项目能在Windows、Linux、Docker上运行,甚至能在树莓派等项目创立时尚未存在的机器上运行。

在本文中,我想尝试一下能否利用.NET升级助手,将这个已有20年历史的项目搬到.NET 6上运行。

下面,我们开始:

$ upgrade-assistant upgrade .\TinyOS.sln-----------------------------------------------------------------------------------------------------------------Microsoft .NET Upgrade Assistant v0.3.256001 3c4e05c787f588e940fe73bfa78d7eedfe0190bd

We are interested in your feedback! Please use thefollowing link to open a survey: https://aka.ms/DotNetUASurvey-----------------------------------------------------------------------------------------------------------------

[22:58:01 INF] Loaded 5 extensions[22:58:02 INF] Using MSBuild from C:\ProgramFiles\dotnet\sdk\6.0.100\[22:58:02 INF] Using Visual Studio install from C:\ProgramFiles\Microsoft Visual Studio\2022\Preview [v17][22:58:06 INF] Initializing upgrade step Select anentrypoint[22:58:07 INF] Setting entrypoint to only project insolution: C:\Users\scott\TinyOS\src\TinyOSCore\TinyOSCore.csproj[22:58:07 INF] Recommending executable TFM net6.0 becausethe project builds to an executable[22:58:07 INF] Initializing upgrade step Select project toupgrade[22:58:07 INF] Recommending executable TFM net6.0 becausethe project builds to an executable[22:58:07 INF] Recommending executable TFM net6.0 becausethe project builds to an executable[22:58:07 INF] Initializing upgrade step Back up project

升级过程是交互式的命令行,使用了有颜色的提示信息,还有一系列带有动态选项的问题:

有意思的是,升级之后构建一次成功,没有任何错误。

手工检查.csproj文件时,我发现了一些奇怪的数字,很像是来自多年前的.NET Core 2。我的直觉告诉我这里有问题,而升级助手并没有理解。

<!-- <PackageReference Include="ILLink.Tasks" Version="0.1.4-preview-906439" /> --><PackageReference Include="Microsoft.Extensions.Configuration" Version="2.0.0-preview2-final" /><PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.0.0-preview2-final" /><PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.0-preview2-final" /><PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.0.0-preview2-final" />

我还注意到一个被注释掉的指向ILLink.Tasks的引用,这是当年Mono的连接器的一个预览功能,目的是压缩应用程序的最终大小,并裁剪掉无用的代码。这项功能已经内置到.NET 6中,后面会用到。所以这里不需要这个引用了。

我决定先不管三七二十一直接升级到.NET 6看看会怎样。我只需要改一个数字,看看能否恢复并构建,但也可以尝试一下dotnetoutdated工具,这个工具非常好用:

这个“outdated”工具妙就妙在它会调用NuGet来查看某个包是否有新版本。

在测试中(此时只不过是一些批处理文件),我采用如下方式调用dotnet:

dotnet netcoreapp2.0/TinyOSCore.dll 512 scott13.txt

之后会改成现代形式,只有TinyOSCore.exe 512 scott13.txt,只需要exe文件和参数,不需要额外的东西。

经过发布和裁剪后,我的操作系统变成了一个仅有15MB的exe文件。考虑到.NET已存在,不需要额外安装,这个结果已经很优秀了。如果我愿意,甚至可以将这个操作系统变成一个微服务:

dotnet publish -r win-x64 --self-contained -p:PublishSingleFile=true-p:SuppressTrimAnalysisWarnings=true

如果加上:

-p:EnableCompressionInSingleFile=true

还能进一步缩小。不需要修改任何代码。测试也都通过了。当年为学校编写的 .NET 1.1 现在都移植到了 .NET 6.0上,而且还能跨平台,自带运行时,而且只包含一个仅有11MB的EXE文件。

参考链接:

https://www.hanselman.com/blog/upgrading-a-20-year-old-university-project-to-net-6-with-dotnetupgradeassistant

END

《新程序员001-004》全面上市,对话世界级大师,报道中国IT行业创新创造

成就一亿技术人

    推荐阅读
  • 朝鲜这个神奇的国度(揭秘神秘国度朝鲜)

    日俄战争的结果是俄罗斯战败,日本侵占了朝鲜半岛。日本退军之后的朝鲜半岛被前苏联和美国接管控制。1948年,大韩民国和朝鲜民主主义人民共和国才分别宣布成立。在没有分成两个国家之前,朝鲜半岛可以算得上是自给自足的平衡状态。比如,美国解除对朝鲜的制裁和经济封锁。最主要的原因就是受到了来自美国的核威慑和制裁。

  • 鹦鹉哪些品种比较大(千元左右最受欢迎的四种鹦鹉)

    吸蜜鹦鹉顾名思义吸食花蜜的鹦鹉,饲养要求相对高,饲养麻烦需要定期喂食花蜜。大大部分新手饲养吸蜜鹦鹉不知道缺点,只是看中了艳丽的羽毛就想带回家,养了几天新鲜劲过了就不想养了。

  • 标准镜头和变焦镜头是什么(镜头焦距是什么意思)

    在如今的智能手机早已经三摄四摄普及的年代,可能大家平时都会听到厂商宣传自家的多摄是由什么长焦镜头,广角镜头等等怎样组合起来的,但是这些专业术语可能很多人都还不太明白,那么今天我们就来讲讲镜头。而200mm以上的就是长焦镜头了,可以拍摄很远的地方,所以一般用来拍摄远处的动物等等。

  • 男人保养皮肤的方法(男人怎么保养皮肤)

    男人保养皮肤的方法远离陋习不良行为男人皮肤健康问题与不良生活方式有很大的关系,特备是有长期抽烟、熬夜、饮食不顾虑、膳食结构不合理的男性更容易出现肌肤暗淡等肌肤问题。此外,男性压力过大、过多的户外运动也影响男人脸部皮肤的健康。所以要纠正生活陋习,避免压力,减少户外运动。面部皮肤护理保健男人面部皮肤保养除避免陋习外,日常生活中的皮肤护理保健也非常的重要。

  • 月亮也在大海某处迷茫什么意思(怎么理解月亮也在大海某处迷茫)

    这句话出自李诞在《吐槽大会》中的发言。李诞在《吐槽大会》中的句子还有:认命是北方的美学。“结婚为什么要放爆竹啊?”“想必是给自己壮胆吧。”头疼,我一想到自己要做不想做的事,就会导致连想做的事都不想做了。

  • 植物保养技巧与方法(夏天植物脱水后的正确补水方法)

    夏天气温炎热,光照强,空气对流强,土地的水分蒸发快,这时最容易遇到的问题就是心爱的植物脱水萎蔫,夏天脱水后的植物并不是简单的浇水就行,要依据各类情况做出适当调整。等到植物的泥土降温后,再通过浇水进行补水。浸盆就是比花盆大的容器,将花盆放进去,加水的高度以淹没花盆高度一半左右为宜。浸盆15-40分钟,就能让泥土彻底湿润,浸盆时间不能超过一小时,否则会导致植物烂根。

  • 教育部:强化作业手机等管理(教育部:强化作业手机等管理,不得要求家长检查批改作业)

    据悉,近期教育部召开新闻发布会介绍,将强化作业手机等管理,不得给家长布置或变相布置作业。据报道,就在刚刚 ,教育部最新公告:新学期中小学教育教学要提高教育教学质量,强化学生作业管理,严格按照规定控制作业总量,坚决克服机械、无效作业,杜绝重复性、惩罚性作业。

  • 李尖尖是什么电视剧的扮演者(以家人之名简介)

    李尖尖是什么电视剧的扮演者是电视剧《以家人之名》的扮演者,是谭松韵饰演的。她在剧中是一名木雕师,喜欢一切甜食,小时候的梦想是住进糖果屋,也因此常去看牙医。大哥凌霄、二哥贺子秋、妹妹李尖尖在两个爸爸的抚养下相互扶持、共同成长。九年后,哥哥们回到了新家人身边,三人终于团聚,但由于原生家庭造成的心理问题仍如影随形。

  • 酸菜肉馅饺子的做法(有什么具体的步骤)

    跟着小编一起来看一看吧!酸菜肉馅饺子的做法将腌好的酸菜用水多洗几遍,切碎,和肉馅一起放入盆中,加入盐、花椒面、味精、酱油,在锅中将一勺油烧开,加入葱花,倒入盆中,一起沿着一个方向均匀搅拌。酸菜馅和好待用。用面粉和成面团,饧大约10分钟,将面团揉成圆调状,揪成均匀大小的剂子。把面剂子按扁,擀成饺子皮,在饺子皮中打入酸菜馅,将皮往中间捏紧,饺子就包好了。

  • 感恩感谢男朋友的话(感谢男友的唯美话语)

    随缘惜缘不攀缘,缘起缘落,生死携阔。偶然中相遇,有缘不容易。也许天注定,错过多可惜。时常觉得自己是个幸运的人。一再的体会,一再的确信,是大家用爱心与宽容组成了我生活的点点滴滴。朋友,谢谢你一直以来对我的关心!爱并不见得一定是轰轰烈烈的,爱是平凡生活中的呢喃。两个人来自不同的背景,能够结合在一起,可见是天注定的。