j’ai écrit un Système d’exploitation virtuel minuscule pour une classe de système d’exploitation de niveau 300 en C# pour l’université en 2001 (?) et plus tard déplacé vers VB.NET en 2002. Tout cela est pré-.NET Core et sur les premiers .NET 1.1 ou 2.0 sous Home windows. je déplacé vers GitHub il y a 5 ans et l’a porté sur .NET Core 2.0 à l’époque. À ce stade, il avait 15 ans, donc c’était cool de voir ce projet fonctionner sur Home windows, Linux, dans Docker et sur un Raspberry Pi… une machine qui n’existait pas lorsque le projet a été écrit à l’origine.
NOTE: Si la chronologie est déroutante, je travaillais déjà dans l’industrie depuis des années à ce stade, mais j’étais toujours en prepare de terminer mon diplôme de 4 ans la nuit. Il a finalement fallu 11 ans pour terminer mon BS en génie logiciel.
Ce soir, pendant que les enfants dormaient, j’ai voulu voir si je pouvais diriger le Assistant de mise à niveau .NET sur cette utility qui a maintenant 20 ans et faites-la fonctionner sur .NET 6.
Commençons:
$ upgrade-assistant improve .TinyOS.sln
-----------------------------------------------------------------------------------------------------------------
Microsoft .NET Improve Assistant v0.3.256001+3c4e05c787f588e940fe73bfa78d7eedfe0190bdWe're desirous about your suggestions! Please use the next hyperlink to open a survey: https://aka.ms/DotNetUASurvey
-----------------------------------------------------------------------------------------------------------------(22:58:01 INF) Loaded 5 extensions
(22:58:02 INF) Utilizing MSBuild from C:Program Filesdotnetsdk6.0.100
(22:58:02 INF) Utilizing Visible Studio set up from C:Program FilesMicrosoft Visible Studio2022Preview (v17)
(22:58:06 INF) Initializing improve step Choose an entrypoint
(22:58:07 INF) Setting entrypoint to solely undertaking in resolution: C:UsersscottTinyOSsrcTinyOSCoreTinyOSCore.csproj
(22:58:07 INF) Recommending executable TFM net6.0 as a result of the undertaking builds to an executable
(22:58:07 INF) Initializing improve step Choose undertaking to improve
(22:58:07 INF) Recommending executable TFM net6.0 as a result of the undertaking builds to an executable
(22:58:07 INF) Recommending executable TFM net6.0 as a result of the undertaking builds to an executable
(22:58:07 INF) Initializing improve step Again up undertaking
Voyez remark le processus est interactif au niveau de la ligne de commande, avec des invitations de couleur et une série de questions dynamiques à choix multiples ?

Fait intéressant, il s’appuie sur le premier essai, sans erreur.
Lorsque je regarde manuellement le .csproj, je peux voir des numéros de model étranges, probablement d’une model pas tout à fait cuite de .NET Core 2 que j’ai utilisée il y a de nombreuses années. Mon sens aigu dit que c’est fake, et je suppose que l’assistant de mise à niveau ne l’a pas compris.
<!-- <PackageReference Embody="ILLink.Duties" Model="0.1.4-preview-906439" /> -->
<PackageReference Embody="Microsoft.Extensions.Configuration" Model="2.0.0-preview2-final" />
<PackageReference Embody="Microsoft.Extensions.Configuration.Json" Model="2.0.0-preview2-final" />
<PackageReference Embody="Microsoft.Extensions.DependencyInjection" Model="2.0.0-preview2-final" />
<PackageReference Embody="Microsoft.Extensions.Choices.ConfigurationExtensions" Model="2.0.0-preview2-final" />
Je observe également une référence commentée à ILLink.Duties qui était une fonctionnalité de prévisualisation dans Mono’s Linker pour réduire la taille finale des functions et les arborer. Certaines de ces fonctionnalités sont désormais intégrées à .NET 6, je les utiliserai donc ultérieurement lors du processus de development et de conditionnement. La référence n’est pas nécessaire aujourd’hui.
Je vais les mettre à niveau aveuglément vers .NET 6 et voir ce qui se passe. Je pourrais le faire en changeant simplement les chiffres et en voyant s’il se restaure et se construit, mais je peux aussi essayer dotnet obsolète qui reste un bel outil dans la boîte à outils de l’upgrader.

Cet outil « obsolète » est agréable automobile il communique avec NuGet et confirme qu’il existe des variations plus récentes de certains packages.
Dans mes assessments – qui n’étaient que des fichiers batch à ce stade précoce – j’appelais mon utility dotnet comme ceci :
dotnet netcoreapp2.0/TinyOSCore.dll 512 scott13.txt
Cela passera à la forme moderne avec juste TinyOSCore.exe 512 scott13.txt
avec un exe et des arguments et sans cérémonie.
La publication et le découpage de mon TinyOS se transforment en un easy EXE de 15 Mo. Bien vu que le .NET dont j’ai besoin est là sans set up séparée. Je pourrais transformer ce petit OS synthétique en microservice si je voulais être totalement additional.
dotnet publish -r win-x64 --self-contained -p:PublishSingleFile=true -p:SuppressTrimAnalysisWarnings=true
Si j’ajoute
-p:EnableCompressionInSingleFile=true
Ensuite, c’est encore plus petit. Aucun changement de code. Exécutez tous mes assessments, semble bon. Mon projet universitaire de .NET 1.1 est maintenant .NET 6.0, multiplateforme, autonome en 11 Mo dans un seul EXE. Doux.
Parrainer: Chez Rocket Mortgage®, le travail que vous faites ici aura un influence à 100 % mais ne prendra pas tout votre temps libre, vous offrant un équilibre parfait entre vie professionnelle et vie privée. Ou comme nous l’appelons, l’équilibre approach/vie ! Apprendre encore plus.
À propos de Scott