Jak migrovat desktopové Windows Forms do .NET 5

Tento článek popisuje, jak migrovat desktopové Windows Forms z .NET Framework na .NET 5 nebo novější. Sada .NET SDK zahrnuje podporu pro Windows Forms. Windows Formuláře jsou stále pouze Windows a běží pouze na Windows.

Migrace aplikace z .NET Framework na .NET 5 obecně vyžaduje nový soubor projektu. .NET 5 používá soubory projektu ve stylu sady SDK, .NET Framework obvykle používá starší soubor Visual Studio projektu. Pokud jste někdy otevřeli soubor Visual Studio v textovém editoru, víte, jak podrobný je. Projekty ve stylu sady SDK jsou menší a nevyžadují tolik položek jako starší formát souboru projektu.

Další informace o .NET 5 najdete v tématu Úvod do .NET.

Vyzkoušejte pomocníka s upgradem.

Pomocník s upgradem .NET je nástroj příkazového řádku, který lze spustit na různých typech .NET Framework aplikací. Je navržený tak, aby pomáhal s upgradem .NET Framework aplikací na .NET 5. Po spuštění nástroje bude ve většině případů aplikace vyžadovat další úsilí k dokončení migrace. Součástí nástroje je instalace analyzátorů, které vám mohou s dokončením migrace pomoct.

Další informace najdete v tématu Upgrade aplikace WPF na .NET 5 pomocí nástroje .NET Upgrade Assistant.

Požadavky

Zvážit

Při migraci aplikace .NET Framework Windows Forms je třeba zvážit několik věcí.

  1. Zkontrolujte, že je vaše aplikace dobrým kandidátem na migraci.

    Pomocí analyzátoru přenositelnosti rozhraní .NET zjistěte, jestli bude váš projekt migrován na .NET 5. Pokud má váš projekt problémy s rozhraním .NET 5, pomůže vám analyzátor tyto problémy identifikovat. Nástroj .NET Portability Analyzer lze nainstalovat jako Visual Studio nebo použít z příkazového řádku. Další informace najdete v tématu Analyzátor přenositelnosti rozhraní .NET.

  2. Používáte jinou verzi Windows Forms.

    Když jsme vydali .NET Core 3.0, Windows Forms open source na GitHub. Kód pro Windows Forms pro .NET 5 je fork kódu .NET Framework Windows Forms. Je možné, že existují některé rozdíly a migrace vaší aplikace bude obtížná.

  3. S migrací Windows může pomoct sada kompatibilních aplikací.

    Některá rozhraní API dostupná v .NET Framework nejsou v .NET 5 dostupná. Sada Windows Compatibility Pack přidává mnoho z těchto rozhraní API a může pomoct vaší aplikaci Windows Forms stát se kompatibilní s .NET 5.

  4. Aktualizujte NuGet balíčky používané vaším projektem.

    Vždy je vhodné používat nejnovější verze balíčků NuGet před migrací. Pokud vaše aplikace odkazuje na jakékoli NuGet, aktualizujte je na nejnovější verzi. Ujistěte se, že se vaše aplikace úspěšně sestaví. Pokud po upgradu dojde k chybám balíčku, downgrade balíčku na nejnovější verzi, která nenaruší váš kód.

Zálohování projektů

Prvním krokem při migraci projektu je zálohování projektu. Pokud se něco pokazí, můžete obnovit kód do původního stavu obnovením zálohy. Nespoléhejte na nástroje, jako je .NET Portability Analyzer, pro zálohování projektu, i když se zdá, že. Nejlepší je vytvořit kopii původního projektu.

Balíčky NuGet

Pokud váš projekt odkazuje na NuGet, pravděpodobně máte ve složce projektu packages.config soubor. U projektů ve stylu sady SDK NuGet odkazy na sadě SDK nakonfigurovány v souboru projektu. Visual Studio projektu mohou volitelně definovat NuGet balíčky v souboru projektu. .NET 5 pro balíčky packages.config NuGet. NuGet musí být odkazy na balíček migrovány do souboru projektu před migrací.

Pokud chcete migrovatpackages.config, proveďte následující kroky:

  1. V Průzkumníku řešení vyhledejte projekt, který migrujete.
  2. Klikněte pravým tlačítkem na packages.config > Migrate packages.config to PackageReference.
  3. Vyberte všechny balíčky nejvyšší úrovně.

Vygeneruje se sestava sestavení, která vám bude vědět o všech problémech s migrací NuGet balíčků.

Project souboru

Dalším krokem při migraci aplikace je převod souboru projektu. Jak bylo uvedeno výše, .NET 5 používá soubory projektu ve stylu sady SDK a nebude načítat soubory Visual Studio projektu, které .NET Framework používá. Je ale možné, že už používáte projekty ve stylu sady SDK. Tento rozdíl můžete snadno zjistit v Visual Studio. V Průzkumníku řešení klikněte pravým tlačítkem na soubor projektu a vyhledejte možnost Project Upravit soubor. Pokud tato položka nabídky chybí, používáte starý formát Visual Studio projektu a potřebujete provést upgrade.

Převeďte každý projekt v řešení. Pokud používáte ukázkovou aplikaci, na kterou jste odkazli dříve, převedou se projekty MatchingGame i MatchingGame.Logic.

Pokud chcete převést projekt, proveďte následující kroky:

  1. V Průzkumníku řešení vyhledejte projekt, který migrujete.

  2. Klikněte pravým tlačítkem na projekt a vyberte Unload Project.

  3. Klikněte pravým tlačítkem na projekt a vyberte Upravit Project souboru.

  4. Zkopírujte a vložte XML projektu do textového editoru. Budete chtít kopii, aby bylo snadné přesunout obsah do nového projektu.

  5. Vymažte obsah souboru a vložte následující kód XML:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>WinExe</OutputType>
        <TargetFramework>net5.0-windows</TargetFramework>
        <UseWindowsForms>true</UseWindowsForms>
        <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
      </PropertyGroup>
    
    </Project>
    

    Důležité

    Knihovny nemusí definovat <OutputType> nastavení. Pokud upgradujete projekt knihovny, odeberte ji.

Tento kód XML poskytuje základní strukturu projektu. Neobsahuje ale žádné nastavení ze starého souboru projektu. Pomocí starých informací o projektu, které jste předtím zkopíroval do textového editoru, proveďte následující kroky:

  1. Zkopírujte následující prvky ze starého souboru projektu <PropertyGroup> do elementu v novém souboru projektu:

    • <RootNamespace>
    • <AssemblyName>

    Soubor projektu by měl vypadat podobně jako následující kód XML:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>WinExe</OutputType>
        <TargetFramework>net5.0-windows</TargetFramework>
        <UseWindowsForms>true</UseWindowsForms>
        <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    
        <RootNamespace>MatchingGame</RootNamespace>
        <AssemblyName>MatchingGame</AssemblyName>
      </PropertyGroup>
    
    </Project>
    
  2. Zkopírujte prvky ze starého souboru projektu, které obsahují nebo , do <ItemGroup> nového souboru za uzavírací <ProjectReference> <PackageReference> </PropertyGroup> značkou.

    Soubor projektu by měl vypadat podobně jako následující kód XML:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        (contains settings previously described)
      </PropertyGroup>
    
      <ItemGroup>
        <ProjectReference Include="..\MatchingGame.Logic\MatchingGame.Logic.csproj">
          <Project>{36b3e6e2-a9ae-4924-89ae-7f0120ce08bd}</Project>
          <Name>MatchingGame.Logic</Name>
        </ProjectReference>
      </ItemGroup>
      <ItemGroup>
        <PackageReference Include="MetroFramework">
          <Version>1.2.0.3</Version>
        </PackageReference>
      </ItemGroup>
    
    </Project>
    

    Prvky <ProjectReference> nepostradí a <Project> <Name> podřízené prvky, takže můžete tato nastavení odebrat:

    <ItemGroup>
      <ProjectReference Include="..\MatchingGame.Logic\MatchingGame.Logic.csproj" />
    </ItemGroup>
    

Prostředky a nastavení

Jedním z rozdílů mezi projekty .NET Framework a projekty ve stylu sady SDK, které používá .NET 5, je, že projekty .NET Framework používají model výslovného souhlasu pro soubory kódu. Jakýkoli soubor kódu, který chcete zkompilovat, musí být explicitně definován v souboru projektu. Projekty ve stylu sady SDK jsou obrácené a ve výchozím nastavení se odhlásit chování: Všechny soubory kódu začínající z adresáře projektu a níže jsou automaticky zahrnuty do projektu. Tyto položky nemusíte migrovat, pokud jsou jednoduché a bez nastavení. To samé platí i pro jiné běžné soubory, jako je resx.

Windows Projekty formulářů mohou odkazovat také na následující soubory:

  • Vlastnosti \ Nastavení.settings
  • Vlastnosti \ Resources.resx
  • Vlastnosti \ app.manifest

Na soubor app.manifest se automaticky odkazuje váš projekt a pro jeho migraci nemusíte dělat nic zvláštního.

V projektu je potřeba migrovat všechny soubory *.resx a *.settings ve složce Properties. Zkopírujte tyto položky ze starého souboru projektu <ItemGroup> do elementu v novém projektu. Po zkopírování záznamů změňte všechny <Compile Include="value"> prvky na místo toho použít Update atribut namísto Include .

  • naimportujte konfiguraci pro soubor Nastavení. Settings .

    <ItemGroup>
      <None Update="Properties\Settings.settings">
        <Generator>SettingsSingleFileGenerator</Generator>
        <LastGenOutput>Settings.Designer.cs</LastGenOutput>
      </None>
      <Compile Update="Properties\Settings.Designer.cs">
        <AutoGen>True</AutoGen>
        <DependentUpon>Settings.settings</DependentUpon>
        <DesignTimeSharedInput>True</DesignTimeSharedInput>
      </Compile>
    </ItemGroup>
    

    Důležité

    Visual Basic projekty obvykle používají složku moje Project , zatímco projekty C# obvykle používají vlastnosti složky pro výchozí soubor nastavení projektu.

  • Importujte konfiguraci pro libovolný soubor RESX , jako je například soubor \ Resources. resx . Všimněte si, že Include atribut byl nastaven na hodnotu Update u <Compile> prvku and a <EmbeddedResource> <SubType> byl odebrán z <EmbeddedResource> :

    <ItemGroup>
      <EmbeddedResource Update="Properties\Resources.resx">
        <Generator>ResXFileCodeGenerator</Generator>
        <LastGenOutput>Resources.Designer.cs</LastGenOutput>
      </EmbeddedResource>
      <Compile Update="Properties\Resources.Designer.cs">
        <AutoGen>True</AutoGen>
        <DependentUpon>Resources.resx</DependentUpon>
        <DesignTime>True</DesignTime>
      </Compile>
    </ItemGroup>
    

    Důležité

    Visual Basic projekty obvykle používají složku moje Project , zatímco projekty C# obvykle používají vlastnosti složky pro výchozí soubor prostředků projektu.

Visual Basic

projekty Visual Basic jazyka vyžadují další konfiguraci.

  1. naimportujte konfigurační soubor moje Project \ Application. myapp nastavení. Všimněte si, že <Compile> element používá Update atribut namísto Include atributu.

    <ItemGroup>
      <None Include="My Project\Application.myapp">
        <Generator>MyApplicationCodeGenerator</Generator>
        <LastGenOutput>Application.Designer.vb</LastGenOutput>
      </None>
      <Compile Update="My Project\Application.Designer.vb">
        <AutoGen>True</AutoGen>
        <DependentUpon>Application.myapp</DependentUpon>
        <DesignTime>True</DesignTime>
      </Compile>
    </ItemGroup>
    
  2. Přidejte <MyType>WindowsForms</MyType> nastavení do <PropertyGroup> elementu:

    <PropertyGroup>
      (contains settings previously described)
    
      <MyType>WindowsForms</MyType>
    </PropertyGroup>
    

    toto nastavení importuje My členy oboru názvů Visual Basic programátorům jsou obeznámeni s.

  3. Importujte obory názvů definované vaším projektem.

    Visual Basic projekty mohou automaticky importovat obory názvů do každého souboru kódu. Zkopírujte <ItemGroup> prvky ze starého souboru projektu, které obsahují <Import> do nového souboru za </PropertyGroup> uzavírací značku.

    <ItemGroup>
      <Import Include="Microsoft.VisualBasic" />
      <Import Include="System" />
      <Import Include="System.Collections" />
      <Import Include="System.Collections.Generic" />
      <Import Include="System.Data" />
      <Import Include="System.Drawing" />
      <Import Include="System.Diagnostics" />
      <Import Include="System.Windows.Forms" />
      <Import Include="System.Linq" />
      <Import Include="System.Xml.Linq" />
      <Import Include="System.Threading.Tasks" />
    </ItemGroup>
    

    Pokud nemůžete najít žádné <Import> příkazy nebo pokud se projekt nedaří zkompilovat, ujistěte se, že je <Import> ve vašem projektu definováno alespoň následující příkazy:

    <ItemGroup>
      <Import Include="System.Data" />
      <Import Include="System.Drawing" />
      <Import Include="System.Windows.Forms" />
    </ItemGroup>
    
  4. Z původního projektu zkopírujte <Option*> <StartupObject> nastavení a do <PropertyGroup> prvku:

    <PropertyGroup>
      (contains settings previously described)
    
      <OptionExplicit>On</OptionExplicit>
      <OptionCompare>Binary</OptionCompare>
      <OptionStrict>Off</OptionStrict>
      <OptionInfer>On</OptionInfer>
      <StartupObject>MatchingGame.My.MyApplication</StartupObject>
    </PropertyGroup>
    

Znovu načíst projekt

Po převedení projektu na nový formát ve stylu sady SDK znovu načtěte projekt v Visual Studio:

  1. V Průzkumník řešení Najděte projekt, který jste převedli.

  2. Klikněte pravým tlačítkem myši na projekt a vyberte možnost znovu načíst Project.

    Pokud se projekt nepovede načíst, možná jste v souboru XML projektu zavedli chybu. Otevřete soubor projektu pro úpravy a pokuste se chybu identifikovat a opravit. Pokud nemůžete najít chybu, zkuste začít znovu.

Upravit App.config

Pokud má vaše aplikace App.config soubor, odeberte <supportedRuntime> element:

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />

Při App.config souboru byste měli zvážit několik věcí. soubor App.config v .NET Framework byl použit nejen ke konfiguraci aplikace, ale ke konfiguraci nastavení a chování modulu runtime, jako je například protokolování. Soubor App.config v rozhraní .NET 5 + (a .NET Core) se už nepoužívá pro konfiguraci modulu runtime. Pokud App.config soubory obsahují tyto oddíly, nebudou respektovány.

Přidat balíček kompatibility

Pokud se soubor projektu načítá správně, ale kompilace se pro váš projekt nezdařila a zobrazují se chyby podobné následujícímu:

  • Typ nebo obor názvů se <some name> nepovedlo najít.
  • Název <some name> v aktuálním kontextu neexistuje.

Může být nutné přidat Microsoft.Windows.Compatibility balíček do aplikace. tento balíček přidá rozhraní api ~ 21 000 .net z .NET Framework, například System.Configuration.ConfigurationManager třídu a rozhraní api pro interakci s registrem Windows. Přidejte balíček Microsoft.Windows.Compatibility.

Upravte soubor projektu a přidejte následující <ItemGroup> element:

<ItemGroup>
  <PackageReference Include="Microsoft.Windows.Compatibility" Version="5.0.0" />
</ItemGroup>

Testování aplikace

Po dokončení migrace aplikace si test IT!

Další kroky