溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎樣將Winform移植到.NET Core 3.0

發(fā)布時(shí)間:2021-02-01 10:55:10 來(lái)源:億速云 閱讀:297 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹了怎樣將Winform移植到.NET Core 3.0,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

環(huán)境

首先要下載.NET Core 3.0 與Visual Studio 2019

編輯 csproj 文件

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
 <PropertyGroup>
  <OutputType>WinExe</OutputType>
  <TargetFramework>netcoreapp3.0</TargetFramework>
  <UseWindowsForms>true</UseWindowsForms>
  <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
 </PropertyGroup>
</Project>

恢復(fù) NuGet 包

找到package.config文件右擊選擇Upgrade to PackageReference 但是我會(huì)彈框

怎樣將Winform移植到.NET Core 3.0

我也不知道該怎么解決,搜了一圈沒(méi)搜到,如果有知道的可以在評(píng)論區(qū)告訴我,于是我就老老實(shí)實(shí)將

<?xml version="1.0" encoding="utf-8"?>
<packages>
 <package id="Dapper" version="1.50.2" targetFramework="net45" />
 <package id="EntityFramework" version="6.0.0" targetFramework="net45" />
 <package id="MySql.Data" version="6.7.9" targetFramework="net45" />
 <package id="System.Data.SQLite" version="1.0.108.0" targetFramework="net45" />
 <package id="System.Data.SQLite.Core" version="1.0.108.0" targetFramework="net45" />
 <package id="System.Data.SQLite.EF6" version="1.0.108.0" targetFramework="net45" />
 <package id="System.Data.SQLite.Linq" version="1.0.108.0" targetFramework="net45" />
</packages>

改為下列代碼,并寫到csproj文件中在 project的子節(jié)點(diǎn)中

<ItemGroup>
  <PackageReference Include="Dapper" Version="1.50.2" />
  <PackageReference Include="EntityFramework" Version="6.0.0" />
  <PackageReference Include="MySql.Data" Version="6.7.9" />
  <PackageReference Include="System.Data.SQLite" Version="1.0.108.0" />
  <PackageReference Include="System.Data.SQLite.Core" Version="1.0.108.0" />
  <PackageReference Include="System.Data.SQLite.EF6" Version="1.0.108.0" />
  <PackageReference Include="System.Data.SQLite.Linq" Version="1.0.108.0" />
</ItemGroup>

增加引用

同時(shí),有些dll是 .net framework獨(dú)有,而 .net core因?yàn)楦鞣N原因并沒(méi)有引用進(jìn)來(lái)的。參考Porting to .NET Core。如以下幾個(gè)是需要重新引用的:

  • System.Data。雖然基礎(chǔ)層已經(jīng)是 .NET Core的一部分,即提供者模型和SQL客戶端,但目前還沒(méi)有一些功能,例如架構(gòu)支持和DataTable/ DataSet。

  • System.DirectoryServices。.NET Core目前不支持與LDAP或Active Directory通信。

  • System.Drawing。雖然嚴(yán)格來(lái)說(shuō)它是客戶端API,但許多開(kāi)發(fā)人員在服務(wù)器上使用繪圖API來(lái)提供縮略圖生成或水印。我們目前在 .NET Core中不支持這些API。

  • System.Transactions。雖然ADO.NET支持事務(wù),但不支持分布式事務(wù),其中包括環(huán)境事務(wù)和登記的概念。

  • System.Xml.Xsl和System.Xml.Schema。.NET Core支持XmlDocumentLinq XDocument,包括XPath。但是,目前不支持XSD(XmlSchema)或XSLT(XslTransform)。

  • System.Net.Mail。目前不支持使用這些API從 .NET Core發(fā)送電子郵件。

  • System.IO.Ports。.NET Core目前不包括與串行端口通信的功能。

  • System.Workflow。Windows Workflow Foundation(WF)目前在 .NET Core上不可用。

  • System.Xaml。在創(chuàng)建UWP應(yīng)用程序時(shí),開(kāi)發(fā)人員將使用WinRT XAML API。因此,.NET Core目前不包含托管XAML框架,該框架包括解析XAML文檔和實(shí)例化描述的對(duì)象圖的能力。

在我的項(xiàng)目中,我引用了這些:

<ItemGroup>
  <Reference Include="System.Data"/>
  <Reference Include="System.Xaml"/>
  <Reference Include="System.Transactions"/>
  <Reference Include="System.Drawing"/>
  <Reference Include="System.Data.DataSetExtensions" />
  <Reference Include="Microsoft.CSharp" />
  <Reference Include="System.Net.Http" />
 </ItemGroup>

增加其他文件

增加了如下幾個(gè)項(xiàng)目本身就有的文件

<ItemGroup>
  <None Include="App_Data\data.db" />
  <None Include="packages.config" />
  <None Include="Properties\Settings.settings">
   <Generator>SettingsSingleFileGenerator</Generator>
   <LastGenOutput>Settings.Designer.cs</LastGenOutput>
  </None>
 </ItemGroup>
 <ItemGroup>
  <None Include="App.config">
   <SubType>Designer</SubType>
  </None>
 </ItemGroup>

最終的csproj文件

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">

 <PropertyGroup>
  <OutputType>WinExe</OutputType>
  <TargetFramework>netcoreapp3.0</TargetFramework>
  <UseWindowsForms>true</UseWindowsForms>
  <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
 </PropertyGroup>
 <ItemGroup>
  <PackageReference Include="Dapper" Version="1.50.2" />
  <PackageReference Include="EntityFramework" Version="6.0.0" />
  <PackageReference Include="MySql.Data" Version="6.7.9" />
  <PackageReference Include="System.Data.SQLite" Version="1.0.108.0" />
  <PackageReference Include="System.Data.SQLite.Core" Version="1.0.108.0" />
  <PackageReference Include="System.Data.SQLite.EF6" Version="1.0.108.0" />
  <PackageReference Include="System.Data.SQLite.Linq" Version="1.0.108.0" />
 </ItemGroup>
 <ItemGroup>
  <Reference Include="System.Data"/>
  <Reference Include="System.Xaml"/>
  <Reference Include="System.Transactions"/>
  <Reference Include="System.Drawing"/>
  <Reference Include="System.Data.DataSetExtensions" />
  <Reference Include="Microsoft.CSharp" />
  <Reference Include="System.Net.Http" />
 </ItemGroup>
 <ItemGroup>
  <None Include="App_Data\data.db" />
  <None Include="packages.config" />
  <None Include="Properties\Settings.settings">
   <Generator>SettingsSingleFileGenerator</Generator>
   <LastGenOutput>Settings.Designer.cs</LastGenOutput>
  </None>
 </ItemGroup>
 <ItemGroup>
  <None Include="App.config">
   <SubType>Designer</SubType>
  </None>
 </ItemGroup>
</Project>

移植過(guò)程中遇到的問(wèn)題

.net core不支持Access數(shù)據(jù)庫(kù)

我的代碼中有帶Access數(shù)據(jù)庫(kù)相關(guān)代碼,都報(bào)了缺少程序集引用的錯(cuò)誤,因此我初步增加了引用

<ItemGroup>
  <Reference Include="System.Data"/>
  <Reference Include="System.Data.OleDb"/>
 </ItemGroup>

但是還是沒(méi)用,參考了.NET Core Data Access,發(fā)現(xiàn)是.net core不支持Access的原因,因此都把這段代碼用條件編譯代碼 #if 給包起來(lái)了。

缺少hostfxr.dll文件

怎樣將Winform移植到.NET Core 3.0

編譯成功后運(yùn)行項(xiàng)目發(fā)現(xiàn)彈這個(gè)窗口,我查了下C:\Program Files\dotnet文件中是存在hostfxr.dll的,看了環(huán)境變量也是手動(dòng)設(shè)置了DOTNET_ROOT變量的,但是總是出錯(cuò),沒(méi)辦法,最后通過(guò)復(fù)制hostfxr.dll文件到bin\Debug\netcoreapp3.0\下才運(yùn)行成功

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“怎樣將Winform移植到.NET Core 3.0”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI