U bevindt zich nu op een technische pagina over de software Mercator. Deze pagina bevat specifieke informatie die bestemd is voor professionals van de software Mercator. Wenst u naar algemenere informatie over Mercator door te gaan?


   Deze vraag niet meer stellen

Aandachtspunten voor ontwikkelaars bij de migratie van Mercator naar .net Core

0000003164     -      05-02-2024

Het door Mercator Core gebruikte 8.0 framework is geen opvolger van het .net 4 framework maar van .net Core 3.0. Bovendien zijn hele secties van het framework herschreven om de prestaties en de stabiliteit te verbeteren. Als gevolg hiervan moet aangepaste programmering in en rond Mercator mogelijk worden aangepast tijdens de .net Core-migratie.

In het algemeen zijn deze wijzigingen klein en maken ze achterwaartse compatibiliteit met het 4.8 framework mogelijk.

Deze pagina is niet uitputtend. Waar nodig moet worden verwezen naar de documentatie van Microsoft.


Process.Start : UseShellExecute = true is niet langer de standaardwaarde

De code is aangepast. Geen impact veroorzaakt door Mercator. Als de aangepaste code Process.Start gebruikt, zet dan UseShellExecute op true.

  Gebruik de methode Api.Api.ProcessStartWithShellExecute in plaats van Process.Start of voeg dit toe bij het initialiseren van de ProcessStartInfo :
ProcessStartInfo si = new ProcessStartInfo(fileName, arguments) { UseShellExecute = true };

 

Codering 1252 bestaat niet standaard in .net Core

In MercatorApi.Api: de methoden Chr, Asc, xSha1, xSha256 en Md5 zijn aangepast.

Installeer de nuget: System.Text.Encoding.CodePages

Plaats deze regel code in de initialisatie van uw executable (niet nodig voor een eenvoudige library)

Zoom
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

 

Vervang ContextMenu door ContextMenuStrip

ContextMenu is niet opgenomen in de nieuwe omgeving. In plaats daarvan moet ContextMenuStrip worden gebruikt, die dezelfde functionaliteit biedt.

Als aangepaste code zich rechtstreeks richt tot Form.ContextMenu of Control.ContextMenu om bijvoorbeeld een menu-item uit te schakelen, moet worden opgemerkt dat deze eigenschappen nu null zijn. Mercator instantieert nu Form.ContextMenuStrip en Control.ContextMenuStrip. De items in deze contextmenu's zijn niet langer MenuItems maar ToolStripMenuItems. Op zo'n contextmenu moet de gebeurtenis Popup worden vervangen door Opened. Een menuscheidingsteken wordt niet langer aangemaakt via new MenuItem("-") maar via new ToolStripSeparator().

 

Vervang System.Device.Location.GeoCoordinate door _BaseClasses.GeoCoordinate

Deze code is te vinden in de kaarten die Mercator kan weergeven, en meer bepaald in de markers. Als de oude klasse wordt gebruikt, vervangt u deze gewoon door de nieuwe.

 

Vervang System.DataVisualization.Charting door MercatorDataVisualization.Charting

System.DataVisualization.Charting waarmee je eenvoudig grafieken kunt maken is niet overgezet naar .net Core. (Dit project is verlaten door Microsoft). Deze functies zijn opnieuw opgenomen in MercatorTunnel.dll en zijn beschikbaar in MercatorDataVisualization.Charting. Ze zijn beschikbaar in .net 4.8 en .net Core. Het wordt daarom aanbevolen om deze namespace te gebruiken in zowel .net 4.8 als .net Core. In de meeste gevallen bestaat dit enkel uit het aanpassen van een using clause.

 

Nugets om naar te verwijzen

Als uw code System.Data.SqlClient gebruikt (bv. Api.Zselect, Api.SqlExec, ...), moet uw project verwijzen naar de System.Data.SqlClient 4.8.6 nuget.

Als uw code Newtonsoft (of MercatorTunnel) Json-functionaliteit gebruikt, moet uw project verwijzen naar de Newtonsoft.Json 13.0.1 nuget.

Het is belangrijk om dezelfde versies als Mercator te gebruiken.

 

http web clients

System.Net.HttpWebRequest en System.Net .WebClient zijn afgeschaft in het .net Core framework. U moet nu System.Net.Http.HttpClient gebruiken.

In MercatorTunnel is er een implementatie van deze laatste klasse: MercatorHttpClient.HttpClient die het voordeel heeft dezelfde GetData en PostData implementaties te presenteren die voorheen beschikbaar waren via uitbreiding System.Net.HttpWebRequest. Hierdoor kunnen de nieuwe tools worden gebruikt met een minimum aan codewijzigingen:

Zoom
#if (MERCATOR_CORE)
            MercatorHttpClient.HttpClient client = MercatorHttpClient.HttpClient.Create(url);
#else
            System.Net.HttpWebRequest client = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
#endif
            client.Timeout = 2500;
            StringContainer stringContainer = client.GetData<StringContainer>(out error);

 

Laden van assemblies

Voor het laden van assemblies is .net Core veel lastiger dan .net 4. In veel situaties is de loutere aanwezigheid van een dll in de hoofddirectory van de toepassing niet voldoende. Als de ontwikkeling een standalone toepassing rond Mercator is, worden de te laden assemblies gedefinieerd in het bestand monapplication.deps.json. Dit bestand wordt automatisch gegenereerd en mag nooit worden gewijzigd. Het moet worden verspreid.

Als de ontwikkeling een library is die binnen Mercator gebruikt wordt, moet u deze DLL in "Beheer > SQL-bestanden > Assemblies" plaatsen zodat Mercator deze assembly laadt bij het opstarten. Dit zorgt er ook voor dat de assembly naar alle werkstations wordt gedistribueerd.

 

Versie conflicten

Op enkele uitzonderingen na kan .net Core alle assemblies laden die in .net 4 zijn gemaakt. Het omgekeerde is echter niet waar. Om dit punt te verzekeren moet deze optie op NO blijven staan: "Anderen / Compilatie toestaan van Mercator Core" (id = COMPILCORE).

Bij de automatische verdeling van assemblies vanuit "Beheer > SQL-bestanden > Assemblies" past Mercator deze bijkomende regels toe:

  • een klassieke Mercator krijgt nooit een assembly gecompileerd voor de Core-versie
  • een Mercator Core zal altijd de Core-versie kiezen als er twee assemblies met dezelfde naam bestaan, de ene gecompileerd in .net 4.8 en de andere in .net Core.

Volgens afspraak is in Mercator de laatste index van de versie

  • 40 voor de klassieke versie
  • 80 voor de Core-versie.

 

Multi-platform project .net 4.8 en .net Core

Bekijk deze pagina.