Share via


Uppgradera ett WCF-projekt på serversidan för att använda CoreWCF på .NET 6

Viktigt!

Den här artikeln skrevs innan uppgraderingsassistenttillägget för Visual Studio släpptes och använder det äldre CLI-verktyget. Mer information finns i Använda den äldre .NET-uppgraderingsassistenten.

.NET Upgrade Assistant är ett kommandoradsverktyg som kan hjälpa dig att uppgradera ett befintligt WCF-projekt på serversidan i .NET Framework för att använda CoreWCF-tjänster på .NET 6. Den här artikeln innehåller:

  • Saker att veta innan du börjar.
  • En demonstration av hur du kör verktyget mot ett WCF-projekt på serversidan i .NET Framework.
  • Felsökningstips.

Mer information om hur du installerar verktyget finns i Använda den äldre .NET Upgrade Assistant.

Saker att veta innan du börjar

Det här verktyget stöder för närvarande C#-projekt och använder CoreWCF för att porta lokalt installerade WCF-projekt på serversidan till .NET 6.

För att ett WCF-projekt ska vara tillämpligt för den här uppgraderingen måste det uppfylla följande krav:

  1. Innehåller en .cs fil som refererar till System.ServiceModel och skapar ny ServiceHost.

    Om WCF-projektet har flera ServiceHostmåste alla värdar skapas med samma metod.

  2. Innehåller en .config-fil som lagrar System.ServiceModel egenskaper.

Den aktuella versionen av verktyget stöder inte WCF-projekt som hanteras via .svc-filer.

Kommentar

Om projektet inte är tillämpligt för det här verktyget rekommenderar vi att du tar en titt på genomgångsguiden för CoreWCF och beanTrader-exempeldemonstrationen och uppdaterar projektet manuellt.

Demoapp

Du kan använda exempelprojektet Basic Calculator för att testa uppgraderingen med Uppgraderingsassistenten, som också är demonstrationen som används i den här dokumentationen.

Om du vill prova ett mer komplicerat exempel kan du läsa BeanTrader-exemplet som skapats av Mike Rousos.

Kör uppgraderingsassistenten

Öppna en terminal och navigera till mappen där målprojektet eller lösningen finns. upgrade-assistant upgrade Kör kommandot och skicka namnet på projektet eller lösningen som du uppgraderar.

När ett projekt tillhandahålls startar uppgraderingsprocessen på det projektet omedelbart. Om en lösning tillhandahålls väljer du vilket projekt du normalt kör, som kallas uppgraderingsstartpunkt. Baserat på det projektet skapas ett beroendediagram och ett förslag på vilken ordning du ska uppgradera projekten tillhandahålls.

upgrade-assistant upgrade .\CalculatorSample.sln

Verktyget körs och visar en lista över de steg som ska utföras. När varje steg har slutförts innehåller verktyget en uppsättning kommandon som gör det möjligt för användaren att tillämpa eller hoppa över nästa steg eller något annat alternativ, till exempel:

  • Få mer information om steget.
  • Ändra projekt.
  • Justera loggningsinställningarna.
  • Stoppa uppgraderingen och avsluta.

Om du trycker på Retur utan att välja ett tal markeras det första objektet i listan.

När varje steg initieras kan det ge information om vad det tror kommer att hända om du tillämpar steget.

Välj startpunkten och projektet som ska uppgraderas

Det första steget när du uppgraderar exempelgrundläggande kalkylator är att välja vilket projekt i lösningen som ska fungera som startpunktsprojekt.

Upgrade Steps

1. [Next step] Select an entrypoint
2. Select project to upgrade

Choose a command:
   1. Apply next step (Select an entrypoint)
   2. Skip next step (Select an entrypoint)
   3. See more step details
   4. Configure logging
   5. Exit

Välj kommando 1 för att starta det steget. Resultatet visas:

[10:25:42 INF] Applying upgrade step Select an entrypoint
Please select the project you run. We will then analyze the dependencies and identify the recommended order to upgrade projects.
   1. CalculatorClient
   2. CalculatorService

Det finns två projekt i listan. Eftersom vårt verktyg uppgraderar projektet på serversidan väljer vi kommando 2 för att välja tjänstprojektet som startpunkt.

Uppgradera projektet

När ett projekt har valts visas en lista över uppgraderingssteg som verktyget ska utföra.

Viktigt!

Baserat på det projekt som du uppgraderar kanske du inte ser alla steg som anges i det här exemplet.

Följande utdata beskriver de steg som ingår i uppgraderingen av projektet:

Upgrade Steps

Entrypoint: C:\Users\Desktop\CalculatorSample\CalculatorService\CalculatorService.csproj
Current Project: C:\Users\Desktop\CalculatorSample\CalculatorService\CalculatorService.csproj

1. [Next step] Back up project
2. Convert project file to SDK style
3. Clean up NuGet package references
    a. Duplicate reference analyzer
    b. Package map reference analyzer
    c. Target compatibility reference analyzer
    d. Upgrade assistant reference analyzer
    e. Windows Compatibility Pack Analyzer
    f. MyDotAnalyzer reference analyzer
    g. Newtonsoft.Json reference analyzer
    h. Windows App SDK package analysis
    i. Transitive reference analyzer
4. Update TFM
5. Update NuGet Packages
    a. Duplicate reference analyzer
    b. Package map reference analyzer
    c. Target compatibility reference analyzer
    d. Upgrade assistant reference analyzer
    e. Windows Compatibility Pack Analyzer
    f. MyDotAnalyzer reference analyzer
    g. Newtonsoft.Json reference analyzer
    h. Windows App SDK package analysis
    i. Transitive reference analyzer
6. Add template files
7. Update WCF service to CoreWCF (Preview)
8. Upgrade app config files
    a. Convert Application Settings
    b. Convert Connection Strings
    c. Disable unsupported configuration sections
9. Update source code
    a. Apply fix for UA0002: Types should be upgraded
    b. Apply fix for UA0012: 'UnsafeDeserialize()' does not exist
    c. Apply fix for UA0014: .NET MAUI projects should not reference Xamarin.Forms namespaces
    d. Apply fix for UA0015: .NET MAUI projects should not reference Xamarin.Essentials namespaces
10. Move to next project

Choose a command:
   1. Apply next step (Back up project)
   2. Skip next step (Back up project)
   3. See more step details
   4. Select different project
   5. Configure logging
   6. Exit

Kommentar

För resten av den här artikeln visas inte uppgraderingsstegen uttryckligen om det inte finns något viktigt att framhäva. Resultatet av varje steg visas fortfarande.

Skapa en säkerhetskopia

I det här exemplet på uppgradering av CalculatorService-projektet använder du varje steg. Det första steget, kommando 1, säkerhetskopierar projektet:

[10:25:52 INF] Applying upgrade step Back up project
Please choose a backup path
   1. Use default path [C:\Users\Desktop\CalculatorSample.backup]
   2. Enter custom path

Verktyget väljer en standardsökväg för säkerhetskopiering med namnet efter den aktuella mappen, men där .backup den läggs till. Du kan välja en anpassad sökväg som ett alternativ till standardsökvägen. För varje uppgraderat projekt kopieras mappen för projektet till mappen backup. I det här exemplet CalculatorService kopieras mappen från CalculatorSample\CalculatorService till CalculatorSample.backup\CalculatorService under säkerhetskopieringssteget:

[10:25:53 INF] Backing up C:\Users\Desktop\CalculatorSample\CalculatorService to C:\Users\t-simonaliao\OneDrive - Microsoft\Desktop\CalculatorSample.backup\CalculatorService
[10:25:53 INF] Project backed up to C:\Users\Desktop\CalculatorSample.backup\CalculatorService
[10:25:53 INF] Upgrade step Back up project applied successfully
Please press enter to continue...

Uppgradera projektfilen

Projektet uppgraderas från .NET Framework-projektformatet till .NET SDK-projektformatet.

[10:25:56 INF] Applying upgrade step Convert project file to SDK style
[10:25:56 INF] Converting project file format with try-convert, version 0.4.0-dev
[10:25:56 INF] Recommending executable TFM net6.0 because the project builds to an executable
C:\Users\Desktop\CalculatorSample\CalculatorService\CalculatorService.csproj contains an App.config file. App.config is replaced by appsettings.json in .NET Core. You will need to delete App.config and migrate to appsettings.json if it's applicable to your project.
[10:25:58 INF] Converting project C:\Users\CalculatorSample\CalculatorService\CalculatorService.csproj to SDK style
[10:25:58 INF] Project file converted successfully! The project may require additional changes to build successfully against the new .NET target.
[10:26:00 INF] Upgrade step Convert project file to SDK style applied successfully

Var uppmärksam på utdata för varje steg. Observera att exempelutdata anger att du har ett manuellt steg att slutföra efter uppgraderingen:

App.config ersätts av appsettings.json i .NET Core. Du måste ta bort App.config och migrera till appsettings.json om det är tillämpligt för projektet.

I det här exemplet skapar WCF-uppdateringssteget en ny wcf.config baserat på system.serviceModel avsnittet i App.config. Vi behöver inte migrera till appsettings.json.

Rensa NuGet-referenser

När projektformatet har uppdaterats är nästa steg att rensa NuGet-paketreferenserna.

Förutom de paket som refereras av din app innehåller filen packages.config referenser till beroendena för dessa paket. Om du till exempel har lagt till en referens till paket A som är beroende av paket B, refereras båda paketen till i filen packages.config . I det nya projektsystemet krävs endast referensen till paket A . Det här steget analyserar paketreferenserna och tar bort dem som inte krävs.

[10:26:01 INF] Initializing upgrade step Clean up NuGet package references
[10:26:01 INF] Initializing upgrade step Duplicate reference analyzer
[10:26:01 INF] No package updates needed
[10:26:01 INF] Initializing upgrade step Package map reference analyzer
[10:26:01 INF] Marking assembly reference System.configuration for removal based on package mapping configuration System.Configuration
[10:26:01 INF] Adding package System.Configuration.ConfigurationManager based on package mapping configuration System.Configuration
[10:26:01 INF] Marking assembly reference System.ServiceModel for removal based on package mapping configuration System.ServiceModel
[10:26:01 INF] Adding package System.ServiceModel.Primitives based on package mapping configuration System.ServiceModel
[10:26:01 INF] Adding package System.ServiceModel.Http based on package mapping configuration System.ServiceModel
[10:26:01 INF] Adding package System.ServiceModel.Duplex based on package mapping configuration System.ServiceModel
[10:26:01 INF] Adding package System.ServiceModel.NetTcp based on package mapping configuration System.ServiceModel
[10:26:01 INF] Adding package System.ServiceModel.Security based on package mapping configuration System.ServiceModel
[10:26:01 INF] Adding package System.ServiceModel.Federation based on package mapping configuration System.ServiceModel

[10:26:01 INF] Initializing upgrade step Remove reference 'System.configuration'
[10:26:03 INF] Applying upgrade step Remove reference 'System.configuration'
[10:26:03 INF] Removing outdated assembly reference: System.configuration
[10:26:03 INF] Upgrade step Remove reference 'System.configuration' applied successfully

[10:26:05 INF] Initializing upgrade step Remove reference 'System.ServiceModel'
[10:26:06 INF] Applying upgrade step Remove reference 'System.ServiceModel'
[10:26:06 INF] Removing outdated assembly reference: System.ServiceModel
[10:26:06 INF] Upgrade step Remove reference 'System.ServiceModel' applied successfully

[10:26:07 INF] Initializing upgrade step Add package 'System.Configuration.ConfigurationManager'
[10:26:09 INF] Applying upgrade step Add package 'System.Configuration.ConfigurationManager'
[10:26:09 INF] Adding package reference: System.Configuration.ConfigurationManager, Version=5.0.0
[10:26:09 INF] Upgrade step Add package 'System.Configuration.ConfigurationManager' applied successfully
[10:26:09 INF] Applying upgrade step Package map reference analyzer
[10:26:09 INF] Upgrade step Package map reference analyzer applied successfully

[10:26:10 INF] Initializing upgrade step Target compatibility reference analyzer
[10:26:10 INF] No package updates needed
[10:26:10 INF] Initializing upgrade step Upgrade assistant reference analyzer
[10:26:11 INF] Reference to .NET Upgrade Assistant analyzer package (Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers, version 0.4.336902) needs to be added
[10:26:11 INF] Initializing upgrade step Add package 'Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers'
[10:26:13 INF] Applying upgrade step Add package 'Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers'
[10:26:13 INF] Adding package reference: Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers, Version=0.4.336902
[10:26:13 INF] Upgrade step Add package 'Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers' applied successfully
[10:26:13 INF] Applying upgrade step Upgrade assistant reference analyzer
[10:26:14 INF] Upgrade step Upgrade assistant reference analyzer applied successfully

[10:26:15 INF] Initializing upgrade step Windows Compatibility Pack Analyzer
[10:26:15 INF] No package updates needed
[10:26:15 INF] Initializing upgrade step MyDotAnalyzer reference analyzer
[10:26:15 INF] No package updates needed
[10:26:15 INF] Initializing upgrade step Newtonsoft.Json reference analyzer
[10:26:15 INF] No package updates needed
[10:26:15 INF] Initializing upgrade step Windows App SDK package analysis
[10:26:15 INF] No package updates needed
[10:26:15 INF] Initializing upgrade step Transitive reference analyzer
[10:26:15 INF] No package updates needed
[10:26:15 INF] Applying upgrade step Clean up NuGet package references
[10:26:15 INF] Upgrade step Clean up NuGet package references applied successfully

Appen refererar fortfarande till .NET Framework-sammansättningar. Vissa av dessa sammansättningar kan vara tillgängliga som NuGet-paket. Det här steget analyserar dessa sammansättningar och refererar till lämpligt NuGet-paket.

I det här exemplet identifierar paketuppdateringsverktyget CalculatorService som ett projekt med endast server och det finns inget behov av att lägga System.ServiceModel till paket. Även om de lades till i listan baserat på konfiguration av paketmappning tillämpades inte dessa steg.

Hantera TFM

Verktyget ändrar sedan TFM från .NET Framework till det föreslagna SDK:t. I det här exemplet är net6.0-windowsdet .

[10:26:17 INF] Applying upgrade step Update TFM
[10:26:17 INF] Recommending executable TFM net6.0 because the project builds to an executable
[10:26:19 INF] Updated TFM to net6.0
[10:26:19 INF] Upgrade step Update TFM applied successfully

Uppgradera NuGet-paket

Därefter uppdaterar verktyget projektets NuGet-paket till de versioner som stöder den uppdaterade TFM: net6.0-windows.

[10:26:20 INF] Initializing upgrade step Update NuGet Packages
[10:26:20 INF] Initializing upgrade step Duplicate reference analyzer
[10:26:20 INF] No package updates needed
[10:26:20 INF] Initializing upgrade step Package map reference analyzer
[10:26:20 INF] No package updates needed
[10:26:20 INF] Initializing upgrade step Target compatibility reference analyzer
[10:26:20 INF] No package updates needed
[10:26:20 INF] Initializing upgrade step Upgrade assistant reference analyzer
[10:26:20 INF] No package updates needed
[10:26:20 INF] Initializing upgrade step Windows Compatibility Pack Analyzer
[10:26:20 INF] No package updates needed
[10:26:20 INF] Initializing upgrade step MyDotAnalyzer reference analyzer
[10:26:20 INF] No package updates needed
[10:26:20 INF] Initializing upgrade step Newtonsoft.Json reference analyzer
[10:26:20 INF] No package updates needed
[10:26:20 INF] Initializing upgrade step Windows App SDK package analysis
[10:26:20 INF] No package updates needed
[10:26:20 INF] Initializing upgrade step Transitive reference analyzer
[10:26:20 INF] No package updates needed
[10:26:20 INF] Applying upgrade step Update NuGet Packages
[10:26:20 INF] Upgrade step Update NuGet Packages applied successfully

Lägga till mallfiler

När paketen har uppdaterats är nästa steg att uppdatera eventuella mallfiler. I det här exemplet finns det inga mallfiler som behöver uppdateras eller läggas till i projektet. Det här steget hoppas över och nästa steg startas automatiskt.

[10:26:20 INF] Initializing upgrade step Add template files
[10:26:20 INF] 0 expected template items needed

Uppdatera WCF-tjänsten till CoreWCF (förhandsversion)

Obs! När den här dokumentationen skrevs tillhandahålls WCF-uppdateringstillägget som en förhandsversion. Om du har feedback om förhandsversionen öppnar du ett problem på GitHub-lagringsplatsen för uppgraderingsassistenten med area:WCF tagg.

Uppgraderingsassistenten initierar först steget WCF Updater och kontrollerar om projektet är tillämpligt för WCF-uppdatering.

[10:26:20 INF] Initializing upgrade step Update WCF service to CoreWCF (Preview)
[10:26:20 INF] This config file is applicable for upgrade: C:\Users\Desktop\CalculatorSample\CalculatorService\App.config. System.serviceModel/services elements were found.
[10:26:20 INF] This  file is applicable for upgrade: C:\Users\Desktop\CalculatorSample\CalculatorService\service.cs. ServiceHost object was found.
[10:26:20 INF] This project file is applicable for upgrade: C:\Users\Desktop\CalculatorSample\CalculatorService\CalculatorService.csproj. Reference to System.serviceModel was found.
[10:26:20 INF] This project is applicable for updating to CoreWCF. Initializing the update step...
[10:26:20 INF] Updaters are successfully constructed. Ready to start update.

Choose a command:
   1. Apply next step (Update WCF service to CoreWCF (Preview))
   2. Skip next step (Update WCF service to CoreWCF (Preview))
   3. See more step details
   4. Select different project
   5. Configure logging
   6. Exit

Steget kontrollerar konfigurationsfilen, källkoden och projektfilen separat för att avgöra om projektet är tillämpligt för WCF-uppdatering. Om projektet inte är tillämpligt (till exempel att inte använda WCF eller inte uppfyller de krav som angavs i början av artikeln) skulle loggningsmeddelandet beskriva vilken fil som inte var tillämplig och vad som saknades. Sedan hoppas steget över och nästa steg startas automatiskt.

I det här exemplet gäller CalculatorSample för WCF-uppdatering och vi väljer kommando 1 för att tillämpa steget.

[10:26:23 INF] Applying upgrade step Update WCF service to CoreWCF (Preview)
[10:26:23 INF] Finish updating project file.
[10:26:23 WRN] The mex endpoint is removed from .config file, and service metadata behavior is configured in the source code instead.
[10:26:23 INF] Finish updating configuration files.
[10:26:23 WRN] Changing void Main() to async Task Main() to enable awaiting starting and stopping the ASP.NET Core host.
[10:26:23 INF] Finish updating source code.
[10:26:23 INF] Finish writing changes to project file.
[10:26:23 INF] Finish writing changes to configuration files.
[10:26:23 INF] Finish writing changes to the source code to replace the ServiceHost instance(s).
[10:26:23 INF] Project was successfully updated to use CoreWCF services. Please review changes.
[10:26:23 INF] Upgrade step Update WCF service to CoreWCF (Preview) applied successfully

Det här steget skapar uppdateringarna och skriver dem i de ursprungliga filerna individuellt. Var uppmärksam på utdata, som kan meddela dig om borttagning från ursprungliga filer eller manuella uppdateringar som ska slutföras efter uppgraderingen.

Uppdatering av konfigurations- och kodfiler

De här stegen kan hoppas över automatiskt av verktyget om verktyget fastställer att det inte finns något att göra för projektet.

När WCF-uppdateringen är klar är nästa steg att uppdatera appkonfigurationsfiler. I det här exemplet behöver inget uppgraderas i appkonfigurationsfilerna. WCF-steget har redan uppdaterat konfigurationsfilerna så det här steget klagar inte över användningen av system.serviceModel. Det här steget hoppas över och nästa steg startas automatiskt.

[10:26:43 INF] Initializing upgrade step Upgrade app config files
[10:26:43 INF] Found 0 app settings for upgrade:
[10:26:43 INF] Found 0 connection strings for upgrade:
[10:26:43 INF] 0 web page namespace imports need upgraded:

Det sista steget innan uppgraderingen av projektet är att uppdatera inaktuella kodreferenser. Baserat på vilken typ av projekt du uppgraderar visas en lista över kända kodkorrigeringar för det här steget. Vissa korrigeringar kanske inte gäller för projektet.

9. Update source code
    a. Apply fix for UA0002: Types should be upgraded
    b. Apply fix for UA0012: 'UnsafeDeserialize()' does not exist
    c. Apply fix for UA0014: .NET MAUI projects should not reference Xamarin.Forms namespaces
    d. Apply fix for UA0015: .NET MAUI projects should not reference Xamarin.Essentials namespaces

I det här fallet gäller ingen av de föreslagna korrigeringarna för exempelprojektet, och det här steget slutförs automatiskt direkt efter att föregående steg har slutförts.

[10:26:44 INF] Initializing upgrade step Update source code
[10:26:44 INF] Running analyzers on CalculatorService
[10:26:48 INF] Identified 0 diagnostics in project CalculatorService
[10:26:51 INF] Initializing upgrade step Move to next project

Slutföra uppgraderingen

Om det finns fler projekt att migrera kan du med verktyget välja vilket projekt som ska uppgraderas härnäst. När det inte finns några fler projekt att uppgradera tar verktyget dig till steget "Slutför uppgraderingen":

1. [Next step] Finalize upgrade

Choose a command:
   1. Apply next step (Finalize upgrade)
   2. Skip next step (Finalize upgrade)
   3. See more step details
   4. Configure logging
   5. Exit
>
[10:27:15 INF] Applying upgrade step Finalize upgrade
[10:27:15 INF] Upgrade step Finalize upgrade applied successfully

Helst bör dessa ändringar visas i de ursprungliga filerna när verktyget har körts.

I service.cs filen ersattes den using System.ServiceModel med referenser till CoreWCF. Instansen ServiceHost togs också bort och tjänsten finns på ASP.NET Core.

using System;
using System.Threading.Tasks;
using CoreWCF;
using CoreWCF.Configuration;
using CoreWCF.Description;
using CoreWCF.Security;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
    public static async Task Main()
    {
        var builder = WebApplication.CreateBuilder();

        // Set up port (previously this was done in configuration,
        // but CoreWCF requires it be done in code)
        builder.WebHost.UseNetTcp(8090);
        builder.WebHost.ConfigureKestrel(options =>
        {
            options.ListenAnyIP(8080);
        });

        // Add CoreWCF services to the ASP.NET Core app's DI container
        builder.Services.AddServiceModelServices()
                        .AddServiceModelConfigurationManagerFile("wcf.config")
                        .AddServiceModelMetadata()
                        .AddTransient<CalculatorSample.CalculatorService>();

        var app = builder.Build();

        // Enable getting metadata/wsdl
        var serviceMetadataBehavior = app.Services.GetRequiredService<ServiceMetadataBehavior>();
        serviceMetadataBehavior.HttpGetEnabled = true;
        serviceMetadataBehavior.HttpGetUrl = new Uri("http://localhost:8080/CalculatorSample/metadata");

        // Configure CoreWCF endpoints in the ASP.NET Core hosts
        app.UseServiceModel(serviceBuilder =>
        {
            serviceBuilder.AddService<CalculatorSample.CalculatorService>(serviceOptions => 
            {
                serviceOptions.DebugBehavior.IncludeExceptionDetailInFaults = true;
            });

            serviceBuilder.ConfigureServiceHostBase<CalculatorSample.CalculatorService>(serviceHost =>
            {

            });
        });
            
        await app.StartAsync();
        Console.WriteLine("The service is ready.");
        Console.WriteLine("Press <ENTER> to terminate service.");
        Console.WriteLine();
        Console.ReadLine();
        await app.StopAsync();
    }

För konfigurationsfilerna system.serviceModel flyttades avsnittet i App.config till den nya konfigurationsfilen wcf.config, som genererades under uppdateringen.

App.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- system.serviceModel section is moved to a separate wcf.config file located at the same directory as this file.-->
</configuration>

wcf.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="CalculatorSample.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior">
        <!--The host element is not supported in configuration in CoreWCF. The port that endpoints listen on is instead configured in the source code.-->
        <!--<host>
  <baseAddresses>
    <add baseAddress="net.tcp://localhost:8090/CalculatorSample/service" />
    <add baseAddress="http://localhost:8080/CalculatorSample/service" />
  </baseAddresses>
</host>-->
        <!-- this endpoint is exposed at the base address provided by host: net.tcp://localhost:8090/CalculatorSample/service  -->
        <endpoint address="/CalculatorSample/service" binding="netTcpBinding" contract="CalculatorSample.ICalculator" />
        <!-- the mex endpoint is exposed at http://localhost:8080/CalculatorSample/service/ -->
        <!--The mex endpoint is removed because it's not support in CoreWCF. Instead, the metadata service is enabled in the source code.-->
      </service>
    </services>
    <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
    <!--The behavior element is not supported in configuration in CoreWCF. Some service behaviors, such as metadata, are configured in the source code.-->
    <!--<behaviors>
  <serviceBehaviors>
    <behavior name="CalculatorServiceBehavior">
      <serviceMetadata httpGetEnabled="True" />
      <serviceDebug includeExceptionDetailInFaults="True" />
    </behavior>
  </serviceBehaviors>
</behaviors>-->
  </system.serviceModel>
</configuration>

Slutligen uppdaterades SDK i projektfilen CalculatorService.csprojför att Microsoft.NET.Sdk.Web aktivera ASP.NET Core-värd- och CoreWCF-paketreferenser har lagts till.

  <ItemGroup>
    <PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
    <PackageReference Include="Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers" Version="0.4.336902">
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="CoreWCF.NetTcp" Version="1.1.0" />
    <PackageReference Include="CoreWCF.Primitives" Version="1.1.0" />
    <PackageReference Include="CoreWCF.ConfigurationManager" Version="1.1.0" />
    <PackageReference Include="CoreWCF.Http" Version="1.1.0" />
    <PackageReference Include="CoreWCF.WebHttp" Version="1.1.0" />
  </ItemGroup>

Observera att det i CalculatorSample inte finns något projekt-till-projekt-beroende och att exemplet kan köras korrekt efter att bara ha uppdaterat CalculatorService. Men i andra fall med olika beroenden kan du behöva uppdatera andra projekt i samma lösning också.

Efter uppgraderingen

När du har uppgraderat dina projekt måste du kompilera och testa dem. Uppgraderingsassistenten gör vad den kan, men den kan inte lösa alla inkompatibiliteter som en del av projektuppgradering. Det är till exempel möjligt att .NET Framework-versionen av din app innehåller biblioteksreferenser som projektet faktiskt inte använder. Du måste analysera varje referens och avgöra om den krävs eller inte. Verktyget kan också ha lagt till eller uppgraderat en NuGet-paketreferens till fel version.

Felsökningstips

Det finns flera kända problem som kan uppstå när du använder .NET Upgrade Assistant. I vissa fall är dessa problem med verktyget try-convert som .NET Upgrade Assistant använder internt.

Verktygets GitHub-lagringsplats innehåller fler felsökningstips och kända problem.

Se även