Visual Studio 2026 / .NET 10 upgrade path

Good day,

I am looking to upgrade a project from .NET 4.x / Visual Studio 2022 to .NET 10 / Visual Studio 2026.

When I run the latest installer it does not offer to integrate into Visual Studio 2026. If I create a .NET 8 project in Visual Studio 2022 can I then open it in Visual Studio 2026 and just update it from .NET 8 to .NET 10?

Our current libraries work fine with .NET 10 (i’ve myself been using .NET 10 with RO/DA extensively internally, for a while), so simply re-opening a project in VS2026 should be fine. Note that uograding a project from “Classic” .NET 4.x to “.NET Core” may require some tweaks (unrelated to .NET 10 specifically).

We’re looking at providing official VS2026 integration in the istallers, soon. (Elements already does, the rest is coming next).

yours,
marc

1 Like

It is possible to open a.NET 8 project in VS 2026 and then change it to.NET 10. Moving from.NET 4.x to.NET Core will be the hardest part. This might need some changes, especially if you are using older APIs or projects that are set up in a certain way. You can use the.NET Upgrade Assistant to find and fix any problems that come up during the move. After that’s done, it should be easy to upgrade in VS 2026. Just make sure to test the requirements to make sure they work with.NET 10.

1 Like

My code is old school because it was originally written for Windows CE devices on .NET Compact Framework 3.5 and RO SDK 6.0.55. It was then ported to the full .NET Framework 3.5 and eventually 4.x as well.

I’ve created the solution, added all of my classes and the .RODL file to it. When the service starts I’m calling the code shown below. The service starts - both on Windows and on Ubuntu Linux - and I’m able to pull up the web page on the http channel. It even let’s me click the link to see the XML document describing the service. I have not gotten far enough along to see if the client can connect to it but that’s next week’s agenda.

        private IpHttpServerChannel httpServerChannel;
        private IpSuperTcpServerChannel tcpServerChannel;
        private Message binServerMessage;
        private static SessionManager sessionManager;
        private static EventSinkManager _SinkManager;

        public void Start()
        {
            if (tcpServerChannel == null)
            {
                sessionManager = new MemorySessionManager();
                _SinkManager = new EventSinkManager();
                queueManager = new MemoryMessageQueueManager();

                sessionManager.OnSessionCreated += (sender, args) =>
                {
                    SessionCreated(sender, (SessionEventArgs)args);
                };

                sessionManager.OnSessionDestroyed += SessionManager_OnSessionDestroyed;
                sessionManager.OnSessionExpired += SessionManager_OnSessionExpired;

                binServerMessage = new BinMessage();

                _SinkManager.Message = binServerMessage;

                tcpServerChannel = new IpSuperTcpServerChannel();

                tcpServerChannel.Port = Port;

                tcpServerChannel.Dispatchers.Add("bin", binServerMessage);

                httpServerChannel = new IpHttpServerChannel();

                httpServerChannel.Port = Port + 1;

                httpServerChannel.Dispatchers.Add("bin", binServerMessage);
            }

            tcpServerChannel.Active = true;

            httpServerChannel.Active = true;
        }
1 Like