一 .netframework程式遷移到.netcore5.0對於.netframwork程式想要升級為.netcore5.0的方法,微軟官方也給出了方法見 https://docs.microsoft.com/en-us/dotnet/desktop/winforms/migration/?vie ...
一 .netframework程式遷移到.netcore5.0
對於.netframwork程式想要升級為.netcore5.0的方法,微軟官方也給出了方法見 https://docs.microsoft.com/en-us/dotnet/desktop/winforms/migration/?view=netdesktop-5.0,我這裡總結記錄一下.
1.首先要檢查自己應用程式適不適合遷移
.netframework框架和.netcore框架有很大的不同,首先得確保自己當前基於.netframework程式遷移到.netcore上要改變哪些東西。下載遷移分析工具NET Portability Analyzer ,這個可以到visual Studio的管理擴展中進行下載,這個分析工具的作用就是告訴我們,從當前版本升級到.netcore5.0版本,你的程式需要改變的庫或者是Nuget包,因為升級後.netcore程式可能不支持以前的的Nuget包或者庫.
安裝完成後,先要進行遷移框架的選擇,比如我先遷移到.netcore5.0上面去
配置目標框架
開始對工程開始進行升級前分析
分析完成後會有生成的報告結果
分析和解釋分析報告
Portability Summary
Details(分析細節部分)
細節分析羅列了在目標框架下會確實的API函數
Target type: 目標平臺下缺失的API
Target member:目標平臺下缺失的方法
Assembly name:.NET Framework下存在已經缺失的API
Missing Assemblies(缺失的程式集)
比如我這裡的EntityFramework.dll,這個程式集只支持.netframework4.8的,在.netcore5.0下麵是不受支持的,所以報告中會顯示出這一項,但是在net5.0下可以用Microsoft.EntityFrameworkCore
下替換,因此還是可以進行遷移。
2.修改項目的工程文件(.csproj)
net5使用sdk風格的項目文件,不會載入net Framework使用的Visual Studio項目文件,因此需要修改工程文件.
2.1首先,在解決方案中要遷移的工程項目進行卸載,然後對項目文件進行編輯
把項目文件中的內容都剪切到別的地方(之後還有用)
2.複製以下文件到項目文件中
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net5.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
</Project>
上述的XML文件給出了工程文件project的基本結構,但是他並沒有包含舊工程文件中的工程名相關的信息,因此需要拷貝舊工程文件下的RootNamespace和AssemblyName所在標簽中的行的內容(比如我這裡面的SqlDemo工程)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net5.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<!--工程名相關的信息-->
<RootNamespace>SqlDemo</RootNamespace>
<AssemblyName>SqlDemo</AssemblyName>
</PropertyGroup>
</Project>
3.複製舊工程中 < ItemGroup > 下包含 < ProjectReference > or < PackageReference > 到 < PropertyGroup > 到新工程的下的 < ItemGroup >(位於< PropertyGroup >後面),並且可以移除舊版本中的< project >和 < name >標簽
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net5.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<!--工程名相關的信息-->
<RootNamespace>SqlDemo</RootNamespace>
<AssemblyName>SqlDemo</AssemblyName>
</PropertyGroup>
<ItemGroup>
<!--包含另外一個工程的路徑,移除舊版本中的<project>和<name>標簽-->
<ProjectReference Include="..\SqlDataSetLib\SqlDataSetLib.csproj"/>
</ItemGroup>
<ItemGroup>
<!--引用的Nuget包名或者某個外部程式集以及填寫版本號,不支持的程式集不要引進來-->
<PackageReference Include="Microsoft.EntityFrameworkCore">
<Version>3.1.4</Version>
</PackageReference>
</ItemGroup>
</Project>
4.複製舊版本中的資源和設置項標簽
舊版本中如果有設置項的資源,如下麵所示的這樣,直接把include改為Update加入到新工程中
<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>
複製資源文件,同理,把資源文件的include替換成Update即可
<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>
最後把保存編輯的.csproj文件,然後點擊重新載入項目,即可遷移到.net5.0.
作者:「一點幾_ZK」
本文來自博客園,作者:古道輕風,轉載請註明原文鏈接:https://www.cnblogs.com/88223100/p/netframework-to-netcore.html