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

Voorbeeld van een cross-platform project .net 4.8 en .net Core

0000003165     -      18-12-2023

Visual Studio staat toe dat assemblies voor twee verschillende frameworks worden geproduceerd vanuit één project. Daartoe moet het projectbestand (csproj) in SDK-formaat zijn. Dit project wordt cross-platform zodra het deze regel bevat:

<TargetFrameworks>net8.0-windows;net48</TargetFrameworks>

 

Tijdens de compilatie worden de Bin\Debug en Bin\Release mappen gesplitst voor elk platform.  Deze topologie wordt aanbevolen om een maximum aan .net Core assemblies te gebruiken in een Mercator Core, terwijl de compatibiliteit met dezelfde Mercator in de klassieke versie verzekerd blijft.

In de onderstaande zip geven wij een voorbeeldoplossing voor dit type project.


MultipleTargetsProject.csproj : het project in SDK-formaat is direct bewerkbaar en dus wijzigbaar in tekstmodus.

Deze clausule zorgt ervoor dat het project Windows-compatibel is en laadt de verwijzing naar System.Windows.Forms.

<UseWindowsForms>true</UseWindowsForms>

Met deze clausule kunt u de eigenschappen van de assembly specificeren in een apart AssemblyInfo.cs bestand (zie hieronder).

<GenerateAssemblyInfo>false</GenerateAssemblyInfo>

 

Dit blok stelt de gebruikelijke compiler constanten in. En het voegt de MERCATOR_CORE constante toe die actief is bij het compileren naar .net Core. Dit maakt het mogelijk om, indien nodig, de .net 4.8 code te scheiden van de .net Core code (zie hieronder).

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <DefineConstants>TRACE;DEBUG</DefineConstants>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <DefineConstants>TRACE</DefineConstants>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(TargetFramework)' == 'net7.0-windows' ">
    <DefineConstants>$(DefineConstants);MERCATOR_CORE</DefineConstants>
  </PropertyGroup>

Dit blok bepaalt de referenties voor het 4.8 framework. Als het Mercator DLL's zijn, is het nodig om DLL's van een klassieke Mercator te refereren.

  <ItemGroup Condition=" '$(TargetFramework)' == 'net48' ">
    <Reference Include="MercatorTunnel">
      <HintPath>C:\DossiersClientsRefAssemblies\fw40\MercatorTunnel.dll</HintPath>
    </Reference>
    <Reference Include="MercatorUi">
      <HintPath>C:\DossiersClientsRefAssemblies\fw40\MercatorUi.dll</HintPath>
    </Reference>
  </ItemGroup>

Dit blok stelt de referenties in voor het .net Core framework. Als het Mercator DLL's zijn, is het noodzakelijk om naar DLL's van een Mercator Core te verwijzen. Dit is ook waar de noodzakelijke nugets voor de Core versie staan.

<ItemGroup Condition=" '$(TargetFramework)' == 'net7.0-windows' ">
    <Reference Include="MercatorTunnel">
      <HintPath>C:\DossiersClientsRefAssemblies\fw70\MercatorTunnel.dll</HintPath>
    </Reference>
    <Reference Include="MercatorUi">
      <HintPath>C:\DossiersClientsRefAssemblies\fw70\MercatorUi.dll</HintPath>
    </Reference>
    <PackageReference Include="System.Data.SqlClient" Version="4.8.5" />
    <PackageReference Include="System.Text.Encoding.CodePages" Version="7.0.0" />
  </ItemGroup>

 Bij het toevoegen van verwijzingen naar assemblies of nugets via de interface classificeert Visual Studio deze nieuwe verwijzingen niet correct volgens het framework. Het is daarom noodzakelijk deze verwijzingen rechtstreeks in het project in tekstmodus te "corrigeren".


Properties\AssemblyInfo.cs

Dit bestand bevat de eigenschappen van de assembly, waaronder dit blok dat toelaat een verschillende versie in te stellen afhankelijk van het compilatieplatform. Volgens afspraak is in Mercator de laatste versie-index

  • 40 voor een klassieke versie,
  • 70 voor een kernversie.
[assembly: AssemblyVersion("1.0.0.0")]
#if !MERCATOR_CORE
[assembly: AssemblyFileVersion("1.0.0.40")]
#else
[assembly: AssemblyFileVersion("1.0.0.70")]
[assembly: System.Runtime.Versioning.SupportedOSPlatform("windows")]
#endif

De regel SupportedOSPlatform voorkomt een reeks waarschuwingen dat de code alleen op het Windows-platform kan draaien.


Class1.cs

Deze C# code laat zien hoe je een compiler directive gebruikt via de MERCATOR_CORE constante om .net 4.8 code te onderscheiden van .net Core code.

Zoom
        public void Test()
        {
            string url = "https://...";
#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 string error);
        }

Zie deze pagina.



Te laden : 0000003165.zip (6 Kb - 19-12-2023)