Sdílet prostřednictvím


Část 1: Migrace aplikace Contoso Expenses do .NET Core 3

Toto je první část kurzu, která ukazuje, jak modernizovat ukázkovou desktopovou aplikaci WPF s názvem Contoso Expenses. Přehled kurzu, předpokladů a pokynů ke stažení ukázkové aplikace najdete v tématu Kurz: Modernizace aplikace WPF.

V této části kurzu budete migrovat celou aplikaci Contoso Expenses z rozhraní .NET Framework 4.7.2 do .NET Core 3. Před zahájením této části kurzu se ujistěte, že jste otevřeli a sestavili ukázkovou aplikaci ContosoExpenses v sadě Visual Studio 2019.

Poznámka:

Další informace o migraci aplikace WPF z rozhraní .NET Framework na .NET Core 3 naleznete v této sérii blogů.

Migrace projektu ContosoExpenses do .NET Core 3

V této části provedete migraci projektu ContosoExpenses v aplikaci Contoso Expenses do .NET Core 3. Uděláte to tak, že vytvoříte nový soubor projektu, který obsahuje stejné soubory jako existující projekt ContosoExpenses, ale cílí na .NET Core 3 místo rozhraní .NET Framework 4.7.2. To vám umožní udržovat jedno řešení s verzemi .NET Framework i .NET Core aplikace.

  1. Ověřte, že projekt ContosoExpenses aktuálně cílí na rozhraní .NET Framework 4.7.2. V Průzkumníku řešení klikněte pravým tlačítkem na projekt ContosoExpenses, zvolte Vlastnostia ověřte, že vlastnost Cílový framework na kartě Aplikace je nastavená na rozhraní .NET Framework 4.7.2.

    .NET Framework verze 4.7.2 pro projekt

  2. V Průzkumníku Windows přejděte do složky C:\WinAppsModernizationWorkshop\Lab\Exercise1\01-Start\ContosoExpenses a vytvořte nový textový soubor s názvem ContosoExpenses.Core.csproj.

  3. Klikněte pravým tlačítkem myši na soubor, zvolte Otevřít v a pak ho otevřete v textovém editoru podle vašeho výběru, jako je Poznámkový blok, Visual Studio Code nebo Visual Studio.

  4. Zkopírujte následující text do souboru a uložte ho.

    <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
    
      <PropertyGroup>
        <OutputType>WinExe</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <UseWPF>true</UseWPF>
     </PropertyGroup>
    
    </Project>
    
  5. Zavřete soubor a vraťte se k řešení ContosoExpenses ve Visual Studiu.

  6. Klikněte pravým tlačítkem na řešení ContosoExpenses a zvolte Přidat –> Existující projekt. Vyberte soubor ContosoExpenses.Core.csproj , který jste právě vytvořili ve C:\WinAppsModernizationWorkshop\Lab\Exercise1\01-Start\ContosoExpenses složce, a přidejte ho do řešení.

ContosoExpenses.Core.csproj obsahuje následující prvky:

  • Element Project určuje verzi sady SDK sady Microsoft.NET.Sdk.WindowsDesktop. To se týká aplikací .NET pro Windows Desktop a zahrnuje komponenty pro aplikace WPF a Windows Forms.
  • PropertyGroup element obsahuje podřízené elementy, které označují výstup projektu jako spustitelný soubor (nikoli knihovnu DLL), cílí na .NET Core 3 a používá WPF. Pro aplikaci Windows Forms byste použili prvek UseWinForms místo prvku UseWPF.

Poznámka:

Při práci s formátem .csproj zavedeným v .NET Core 3.0 se všechny soubory ve stejné složce jako .csproj považují za součást projektu. Proto nemusíte zadávat všechny soubory zahrnuté v projektu. Musíte zadat pouze ty soubory, pro které chcete definovat vlastní akci sestavení nebo které chcete vyloučit.

Migrace projektu ContosoExpenses.Data na .NET Standard

Řešení ContosoExpenses zahrnuje knihovnu tříd ContosoExpenses.Data , která obsahuje modely a rozhraní pro služby a cílí na .NET 4.7.2. Aplikace .NET Core 3.0 můžou používat knihovny rozhraní .NET Framework, pokud nepoužívají rozhraní API, která nejsou dostupná v .NET Core. Nejlepší cestou modernizace je ale přesun knihoven na .NET Standard. Tím zajistíte, že vaše knihovna je plně podporovaná vaší aplikací .NET Core 3.0. Kromě toho můžete knihovnu znovu použít i s jinými platformami, jako je web (prostřednictvím ASP.NET Core).

Migrace projektu ContosoExpenses.Data na .NET Standard:

  1. V prostředí Visual Studio klepněte pravým tlačítkem na projekt ContosoExpenses.Data a zvolte Odpojit projekt. Znovu klikněte pravým tlačítkem myši na projekt a pak zvolte Upravit ContosoExpenses.Data.csproj.

  2. Odstraňte celý obsah souboru projektu.

  3. Zkopírujte a vložte následující KÓD XML a uložte soubor.

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
      </PropertyGroup>
    
    </Project>
    
  4. Klikněte pravým tlačítkem myši na projekt ContosoExpenses.Data a vyberte možnost Znovu načíst projekt.

Konfigurace balíčků NuGet a závislostí

Při migraci projektů ContosoExpenses.Core a ContosoExpenses.Data v předchozích částech jste z projektů odebrali odkazy na balíčky NuGet. V této části tyto odkazy přidáte zpět.

Konfigurace balíčků NuGet pro projekt ContosoExpenses.Data :

  1. V projektu ContosoExpenses.Data rozbalte uzel Dependencies. Všimněte si, že chybí oddíl NuGet.

    balíčky NuGet

    Pokud otevřete Packages.config v Průzkumníku řešení , najdete "staré" odkazy na balíčky NuGet, které používaly projekt při použití úplného rozhraní .NET Framework.

    závislosti a balíčky

    Tady je obsah souboru Packages.config . Všimněte si, že všechny balíčky NuGet cílí na úplné rozhraní .NET Framework 4.7.2:

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="Bogus" version="26.0.2" targetFramework="net472" />
      <package id="LiteDB" version="4.1.4" targetFramework="net472" />
    </packages>
    
  2. V projektu ContosoExpenses.Data odstraňte souborPackages.config .

  3. V projektu ContosoExpenses.Data klikněte pravým tlačítkem na uzel Závislosti a zvolte Spravovat balíčky NuGet.

Správa balíčků NuGet...

  1. V okně Správce balíčků NuGet klikněte na Procházet. Vyhledejte Bogus balíček a nainstalujte nejnovější stabilní verzi.

    Balíček Bogus NuGet

  2. Vyhledejte LiteDB balíček a nainstalujte nejnovější stabilní verzi.

    LiteDB balíčku NuGet

    Možná vás zajímá, kde je tento seznam balíčků NuGet uložený, protože projekt už nemá packages.config soubor. Odkazované balíčky NuGet jsou uložené přímo v souboru .csproj. Můžete to zkontrolovat zobrazením obsahu souboru projektu ContosoExpenses.Data.csproj v textovém editoru. Na konci souboru najdete následující řádky:

    <ItemGroup>
       <PackageReference Include="Bogus" Version="26.0.2" />
       <PackageReference Include="LiteDB" Version="4.1.4" />
    </ItemGroup>
    

    Poznámka:

    Můžete si také všimnout, že instalujete stejné balíčky pro tento projekt .NET Core 3 jako ty, které používají projekty .NET Framework 4.7.2. Balíčky NuGet podporují cílení na více instancí. Autoři knihoven můžou do stejného balíčku zahrnout různé verze knihovny kompilované pro různé architektury a platformy. Tyto balíčky podporují kompletní rozhraní .NET Framework i .NET Standard 2.0, které je kompatibilní s projekty .NET Core 3. Další informace o rozdílech rozhraní .NET Framework, .NET Core a .NET Standard najdete v tématu .NET Standard.

Konfigurace balíčků NuGet pro projekt ContosoExpenses.Core :

  1. V projektu ContosoExpenses.Core otevřete soubor packages.config . Všimněte si, že aktuálně obsahuje následující odkazy, které cílí na rozhraní .NET Framework 4.7.2.

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="CommonServiceLocator" version="2.0.2" targetFramework="net472" />
      <package id="MvvmLightLibs" version="5.4.1.1" targetFramework="net472" />
      <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" />
      <package id="Unity" version="5.10.2" targetFramework="net472" />
    </packages>
    

    V následujících krocích určíte verze .NET Standard balíčků MvvmLightLibs a Unity. Další dvě jsou závislosti, které NuGet automaticky stáhne při instalaci těchto dvou knihoven.

  2. V projektu ContosoExpenses.Core odstraňte souborPackages.config .

  3. Klikněte pravým tlačítkem na projekt ContosoExpenses.Core a zvolte Správa balíčků NuGet.

  4. V okně Správce balíčků NuGet klikněte na Procházet. Vyhledejte Unity balíček a nainstalujte nejnovější stabilní verzi.

    Unity balíčku

  5. Vyhledejte MvvmLightLibsStd10 balíček a nainstalujte nejnovější stabilní verzi. Toto je verze MvvmLightLibs balíčku .NET Standard. Pro tento balíček se autor rozhodl zabalit verzi knihovny .NET Standard do samostatného balíčku než verze rozhraní .NET Framework.

    balíčku MvvmLightsLibs

  6. V projektu ContosoExpenses.Core klikněte pravým tlačítkem na uzel Závislosti a zvolte Přidat odkaz.

  7. V kategorii Projekty > Řešení vyberte ContosoExpenses.Data a klikněte na OK.

    Přidat odkaz

Zakázání automaticky generovaných atributů sestavení

Pokud se v tomto okamžiku v procesu migrace pokusíte sestavit projekt ContosoExpenses.Core , zobrazí se některé chyby.

nové chyby sestavení .NET Core 3

K tomuto problému dochází, protože nový formát .csproj zavedený v .NET Core 3.0 ukládá informace o sestavení do souboru projektu, nikoli do souboru AssemblyInfo.cs . Pokud chcete tyto chyby opravit, zakažte toto chování a nechte projekt dál používat soubor AssemblyInfo.cs .

  1. V sadě Visual Studio klikněte pravým tlačítkem na projekt ContosoExpenses.Core a zvolte Odstranit projekt. Znovu klikněte pravým tlačítkem myši na projekt a pak zvolte Upravit ContosoExpenses.Core.csproj.

  2. Do části PropertyGroup přidejte následující prvek a soubor uložte.

    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    

    Po přidání tohoto elementu by teď část PropertyGroup měla vypadat takto:

    <PropertyGroup>
      <OutputType>WinExe</OutputType>
      <TargetFramework>netcoreapp3.0</TargetFramework>
      <UseWPF>true</UseWPF>
      <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    </PropertyGroup>
    
  3. Klikněte pravým tlačítkem na projekt ContosoExpenses.Core a zvolte Znovu načíst projekt.

  4. Klikněte pravým tlačítkem na projekt ContosoExpenses.Data a zvolte Uvolnit projekt. Znovu klikněte pravým tlačítkem myši na projekt a pak zvolte Upravit ContosoExpenses.Data.csproj.

  5. Přidejte stejnou položku v oddílu PropertyGroup a uložte soubor.

    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    

    Po přidání tohoto elementu by teď část PropertyGroup měla vypadat takto:

    <PropertyGroup>
      <TargetFramework>netstandard2.0</TargetFramework>
      <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    </PropertyGroup>
    
  6. Klikněte pravým tlačítkem myši na projekt ContosoExpenses.Data a vyberte možnost Znovu načíst projekt.

Přidání sady Windows Compatibility Pack

Pokud se teď pokusíte zkompilovat projekty ContosoExpenses.Core a ContosoExpenses.Data, uvidíte, že předchozí chyby jsou opravené, ale v knihovně ContosoExpenses.Data stále existují některé chyby podobné těmto.

Services\RegistryService.cs(9,26,9,34): error CS0103: The name 'Registry' does not exist in the current context Services\RegistryService.cs(12,26,12,34): error CS0103: The name 'Registry' does not exist in the current context Services\RegistryService.cs(12,97,12,123): error CS0103: The name 'RegistryKeyPermissionCheck' does not exist in the current context

Tyto chyby jsou výsledkem převodu projektu ContosoExpenses.Data z knihovny rozhraní .NET Framework (která je specifická pro Windows) na knihovnu .NET Standard, která může běžet na několika platformách, včetně Linuxu, Androidu, iOS a dalších. Projekt ContosoExpenses.Data obsahuje třídu s názvem RegistryService, která komunikuje s registrem, což je koncept jen pro Windows.

Pro vyřešení těchto chyb nainstalujte balíček NuGet kompatibility systému Windows . Tento balíček poskytuje podporu pro mnoho rozhraní API specifických pro Windows, která se mají použít v knihovně .NET Standard. Knihovna už nebude po použití tohoto balíčku multiplatformní, ale bude i nadále cílit na .NET Standard.

  1. Klikněte pravým tlačítkem myši na projekt ContosoExpenses.Data .

  2. Vyberte Spravovat balíčky NuGet.

  3. V okně Správce balíčků NuGet klikněte na Procházet. Vyhledejte Microsoft.Windows.Compatibility balíček a nainstalujte nejnovější stabilní verzi.

    Instalace balíčku NuGet

  4. Teď zkuste projekt zkompilovat tak, že kliknete pravým tlačítkem na projekt ContosoExpenses.Data a zvolíte Sestavení.

Tentokrát se proces sestavení dokončí bez chyb.

Testování a ladění migrace

Teď, když se projekty úspěšně sestavují, jste připraveni spustit a otestovat aplikaci, abyste zjistili, jestli nedošlo k chybám za běhu.

  1. Klikněte pravým tlačítkem myši na projekt ContosoExpenses.Core a zvolte Nastavit jako spouštěcí projekt.

  2. Stisknutím klávesy F5 spusťte projekt ContosoExpenses.Core v ladicím režimu. Zobrazí se výjimka podobná následující.

    Výjimka zobrazená v Visual Studio

    Tato výjimka se vyvolá, protože při odstranění obsahu ze souboru .csproj na začátku migrace jste odebrali informace o akci Sestavení pro soubory obrázků. Následující kroky tento problém opraví.

  3. Zastavte ladicí program.

  4. Klikněte pravým tlačítkem na projekt ContosoExpenses.Core a zvolte Vyložit projekt. Znovu klikněte pravým tlačítkem myši na projekt a pak zvolte Upravit ContosoExpenses.Core.csproj.

  5. Před zavření Projectu elementu přidejte následující položku:

    <ItemGroup>
      <Content Include="Images/*">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
    </ItemGroup>
    
  6. Klikněte pravým tlačítkem na projekt ContosoExpenses.Core a zvolte Znovu načíst projekt.

  7. Chcete-li aplikaci přiřadit ikonu Contoso.ico, klikněte pravým tlačítkem na projekt ContosoExpenses.Core a zvolte Vlastnosti. Na otevřené stránce klikněte na rozevírací seznam pod Ikona a vyberte Images\contoso.ico.

    ikona Contoso v Vlastností projektu

  8. Klikněte na Uložit.

  9. Stisknutím klávesy F5 spusťte projekt ContosoExpenses.Core v ladicím režimu. Ověřte, že se aplikace teď spouští.

Další kroky

V tomto okamžiku v kurzu jste úspěšně migrovali aplikaci Contoso Expenses do .NET Core 3. Nyní jste připraveni na Část 2: Přidat ovládací prvek InkCanvas UWP pomocí XAML Islands.

Poznámka:

Pokud máte obrazovku s vysokým rozlišením, můžete si všimnout, že aplikace vypadá velmi malá. Tento problém vyřešíte v dalším kroku kurzu.