Sdílet prostřednictvím


Upgrade projektu na straně serveru WCF na CoreWCF

Pomocník pro upgrade .NET je nástroj příkazového řádku, který může pomoct s upgradem existujícího projektu na straně serveru WCF v rozhraní .NET Framework tak, aby používal služby CoreWCF v .NET 6. Tento článek obsahuje:

  • Co je potřeba vědět, než začnete.
  • Ukázka toho, jak spustit nástroj proti projektu na straně serveru WCF v rozhraní .NET Framework.
  • Tipy pro řešení potíží

Co je potřeba vědět před zahájením

Tento nástroj aktuálně podporuje projekty C# a používá CoreWCF k přenosu projektů na straně serveru WCF v místním prostředí do .NET 6.

Důležité

Upgrade projektů WCF vyžaduje starší verzi nástroje .NET Upgrade Assistant a není kompatibilní s nejnovějšími verzemi. Pokyny k instalaci starší verze najdete v části Instalace starší verze .

Aby byl projekt WCF použitelný pro tento upgrade, musí splňovat následující požadavky:

  1. Obsahuje soubor .cs, který odkazuje System.ServiceModel na a vytvoří nový ServiceHost.

    Pokud má projekt WCF více ServiceHost, musí být všichni hostitelé vytvořeni ve stejné metodě.

  2. Obsahuje soubor .config, který ukládá System.ServiceModel vlastnosti.

Aktuální verze nástroje nepodporuje projekty WCF hostované prostřednictvím souborů .svc.

Poznámka:

Pokud váš projekt není pro tento nástroj použitelný, doporučujeme se podívat na příručku s návodem k CoreWCF a ukázku BeanTrader Sample a ručně aktualizovat projekt.

Požadavky

Instalace starší verze

dotnet Pomocí příkazu nainstalujte verzi 0.4.421302 pomocníka s upgradem .NET.

dotnet tool install upgrade-assistant -g --version 0.4.421302

Důležité

Pokud jste nakonfigurovali další zdroje informačního kanálu NuGet, instalace může selhat s chybou, která značí, že balíček NuGet není v informačním kanálu dostupný. Pomocí parametru --ignore-failed-sources můžete tyto chyby považovat za upozornění místo chyb a obejít ostatní zdroje informačních kanálů NuGet:

dotnet tool install upgrade-assistant -g --ignore-failed-sources --version 0.4.421302

Ukázková aplikace

Ukázkový projekt základní kalkulačky můžete použít k otestování upgradu pomocí Pomocníka pro upgrade, což je také ukázka použitá v této dokumentaci.

Pokud chcete vyzkoušet složitější ukázku, podívejte se na ukázku BeanTrader vytvořenou Mikeem Rousosem.

Spuštění pomocníka s upgradem

Otevřete terminál a přejděte do složky, kde se nachází cílový projekt nebo řešení. upgrade-assistant upgrade Spusťte příkaz a předáte název projektu nebo řešení, které upgradujete.

Po zadání projektu se proces upgradu spustí na daném projektu okamžitě. Pokud je k dispozici řešení, vyberete projekt, který normálně spouštíte, označovaný jako vstupní bod upgradu. Na základě daného projektu se vytvoří graf závislostí a návrh pořadí, ve kterém byste měli projekty upgradovat.

upgrade-assistant upgrade .\CalculatorSample.sln

Nástroj se spustí a zobrazí seznam kroků, které provede. Po dokončení každého kroku nástroj poskytuje sadu příkazů, které uživateli umožňují použít nebo přeskočit další krok nebo jinou možnost, například:

  • Získejte další informace o kroku.
  • Změňte projekty.
  • Upravte nastavení protokolování.
  • Zastavte upgrade a ukončete ho.

Stisknutím klávesy Enter bez výběru čísla vyberete první položku v seznamu.

Při inicializaci jednotlivých kroků může poskytnout informace o tom, co si myslí, že se stane, pokud tento krok použijete.

Výběr vstupního bodu a projektu pro upgrade

Prvním krokem při upgradu ukázky základní kalkulačky je výběr projektu v řešení, který slouží jako vstupní bod projektu.

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

Pokud chcete tento krok spustit, zvolte příkaz 1 . Zobrazí se výsledky:

[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

V seznamu jsou dva projekty. Vzhledem k tomu, že náš nástroj upgraduje projekt na straně serveru, zvolíme příkaz 2 a jako vstupní bod vybereme projekt služby.

Upgrade projektu

Jakmile je projekt vybraný, zobrazí se seznam kroků upgradu, které nástroj provede.

Důležité

Na základě projektu, který upgradujete, se může nebo nemusí zobrazit každý krok uvedený v tomto příkladu.

Následující výstup popisuje kroky spojené s upgradem projektu:

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

Poznámka:

Ve zbývající části tohoto článku se kroky upgradu explicitně nezobrazují, pokud není něco důležitého volat. Výsledky jednotlivých kroků se stále zobrazují.

Vytvoření zálohy

V tomto příkladu upgradu projektu CalculatorService použijete každý krok. První krok, příkaz 1, zálohuje projekt:

[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

Nástroj zvolí výchozí záložní cestu pojmenovanou za aktuální složkou, ale s připojeným .backup k ní. Jako alternativu k výchozí cestě můžete zvolit vlastní cestu. Pro každý upgradovaný projekt se složka projektu zkopíruje do záložní složky. V tomto příkladu CalculatorService se složka zkopíruje z CalculatorSample\CalculatorService do CalculatorSample.backup\CalculatorService během kroku zálohování:

[10:25:53 INF] Backing up C:\Users\Desktop\CalculatorSample\CalculatorService to C:\Users\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...

Upgrade souboru projektu

Projekt se upgraduje z formátu projektu rozhraní .NET Framework na formát projektu sady .NET SDK.

[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

Věnujte pozornost výstupu každého kroku. Všimněte si, že ukázkový výstup označuje, že po upgradu budete mít ruční krok k dokončení:

App.config se nahrazuje appsettings.json v .NET Core. Budete muset odstranit App.config a migrovat na appsettings.json, pokud se vztahuje na váš projekt.

V této ukázce vytvoří krok aktualizace WCF nový soubor wcf.config na základě oddílu system.serviceModel v souboru App.config. Nebudeme muset migrovat na appsettings.json.

Vyčištění odkazů NuGet

Po aktualizaci formátu projektu je dalším krokem vyčištění odkazů na balíčky NuGet.

Kromě balíčků odkazovaných vaší aplikací obsahuje soubor packages.config odkazy na závislosti těchto balíčků. Pokud jste například přidali odkaz na balíček A , který závisí na balíčku B, budou oba balíčky odkazovány v souboru packages.config . V novém systému projektů je vyžadován pouze odkaz na balíček A . Tento krok analyzuje odkazy na balíčky a odebere ty, které nejsou potřeba.

[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

Vaše aplikace stále odkazuje na sestavení rozhraní .NET Framework. Některá z těchto sestavení mohou být k dispozici jako balíčky NuGet. Tento krok analyzuje tato sestavení a odkazuje na příslušný balíček NuGet.

V tomto příkladu aktualizátor balíčků zjistí CalculatorService jako projekt jen na serveru a není nutné přidávat System.ServiceModel balíčky. I když byly přidány do seznamu na základě konfigurace mapování balíčků, tyto kroky nebyly použity.

Zpracování TFM

Nástroj dále změní TFM z rozhraní .NET Framework na navrženou sadu SDK. V tomto příkladu je net6.0-windowsto .

[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

Upgrade balíčků NuGet

V dalším kroku nástroj aktualizuje balíčky NuGet projektu na verze, které podporují aktualizované 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

Přidání souborů šablon

Po aktualizaci balíčků je dalším krokem aktualizace všech souborů šablon. V tomto příkladu nejsou k dispozici žádné soubory šablon, které by bylo potřeba aktualizovat nebo přidat do projektu. Tento krok se přeskočí a další krok se automaticky spustí.

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

Aktualizace služby WCF na CoreWCF (Preview)

Poznámka: V době, kdy byla tato dokumentace napsána, se rozšíření aktualizátoru WCF dodává jako verze Preview. Pokud máte zpětnou vazbu k verzi Preview, otevřete problém v úložišti Průvodce upgradem na GitHubu se značkouarea:WCF.

Pomocník pro upgrade nejprve inicializuje krok updateru WCF a zkontroluje, jestli je projekt použitelný pro aktualizaci WCF.

[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

Tento krok zkontroluje konfigurační soubor, zdrojový kód a soubor projektu samostatně a rozhodne, jestli je projekt použitelný pro aktualizaci WCF. Pokud projekt není použitelný (například nepoužíváte WCF nebo nesplňuje požadavky uvedené na začátku článku), zpráva protokolování by popsala, který soubor nebyl použitelný a co chybí. Potom se tento krok přeskočí a další krok se automaticky spustí.

V této ukázce je kalkulačkaSample použitelná pro aktualizaci WCF a zvolíme příkaz 1 , který tento krok použije.

[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

Tento krok vytvoří aktualizace a zapíše je do původních souborů jednotlivě. Věnujte pozornost výstupu, který vás může upozornit na odebrání z původních souborů nebo ručních aktualizací, které se mají dokončit po upgradu.

Aktualizace konfiguračních souborů a souborů kódu

Pokud nástroj zjistí, že pro váš projekt není nic společného, může tento nástroj tento postup automaticky přeskočit.

Po dokončení aktualizace WCF je dalším krokem aktualizace konfiguračních souborů aplikace. V tomto příkladu není potřeba v konfiguračních souborech aplikace nic upgradovat. Krok WCF již aktualizoval konfigurační soubory, takže tento krok si nebude stěžovat na použití nepodporované system.serviceModel. Tento krok se přeskočí a další krok se automaticky spustí.

[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:

Posledním krokem před dokončením upgradu tohoto projektu je aktualizace všech zastaralých odkazů na kód. V závislosti na typu projektu, který upgradujete, se pro tento krok zobrazí seznam známých oprav kódu. Některé opravy se nemusí vztahovat na váš projekt.

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

V tomto případě se žádná z navrhovaných oprav nevztahuje na ukázkový projekt a tento krok se automaticky dokončí hned po dokončení předchozího kroku.

[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

Dokončení upgradu

Pokud se mají migrovat nějaké další projekty, nástroj vám umožní vybrat, který projekt se má upgradovat. Pokud nejsou k dispozici žádné další projekty k upgradu, nástroj vás přenese do kroku Dokončení upgradu:

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

V ideálním případě by se tyto změny měly po úspěšném spuštění nástroje zobrazit v původních souborech.

V service.cs souboru using System.ServiceModel byla nahrazena odkazy na CoreWCF. Instance ServiceHost byla také odebrána a služba byla hostována na 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();
    }

U konfiguračních souborů system.serviceModel byl oddíl přesunut App.config do nového konfiguračního souboru wcf.config, který se vygeneroval během aktualizace.

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>

Nakonec se v souboru projektu aktualizovala sada SDK tak, CalculatorService.csprojaby umožňovala přidání odkazů na Microsoft.NET.Sdk.Web balíčky core a coreWCF pro ASP.NET.

  <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>

Všimněte si, že v kalkulačceSample neexistuje závislost mezi projekty a ukázka se může úspěšně spustit až po aktualizaci CalculatorService. V jiných případech ale s různými závislostmi možná budete muset aktualizovat i jiné projekty ve stejném řešení.

Po upgradu

Po upgradu projektů je potřeba je zkompilovat a otestovat. Pomocník pro upgrade udělá, co může, ale nemůže vyřešit každou nekompatibilitu v rámci upgradu projektu. Je například možné, že verze rozhraní .NET Framework vaší aplikace obsahovala odkazy na knihovny, které váš projekt ve skutečnosti nepoužívá. Budete muset analyzovat jednotlivé odkazy a určit, jestli je potřeba. Nástroj mohl také přidat nebo upgradovat odkaz na balíček NuGet na nesprávnou verzi.

Rady pro řešení potíží

Při použití pomocníka s upgradem .NET může dojít k několika známým problémům. V některých případech jsou tyto problémy s nástrojem try-convert, který pomocník pro upgrade platformy .NET používá interně.

Úložiště GitHub tohoto nástroje obsahuje další tipy pro řešení potíží a známé problémy.

Viz také