将基于 .NET Framework 的 WPF 项目迁移到基于 .NET Core 3
原文:将基于 .NET Framework 的 WPF 项目迁移到基于 .NET Core 3

版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:http://blog.csdn.net/wpwalter/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系(walter.lv@qq.com)。 https://blog.csdn.net/WPwalter/article/details/84848052

在 Connect(); 2018 大会上,微软发布了 .NET Core 3 Preview,以及基于 .NET Core 3 的 WPF;同时还发布了 Visual Studio 2019 预览版。你可以基于 .NET Core 3 创建 WPF 程序。不过,如果你已经有基于 .NET Framework 的 WPF 项目,那么如何快速迁移到基于 .NET Core 的版本呢?

本文将指导大家将现有基于 .NET Framework 的 WPF 项目迁移到基于 .NET Core 3 的版本。


本文内容

  • 安装 .NET Core 3.0 Preview SDK
  • 编辑 csproj 文件
  • 编辑 AssemblyInfo.cs 文件
  • 恢复 NuGet 包
  • 编译、运行和修复其他错误
  • 更多

安装 .NET Core 3.0 Preview SDK

前往官网下载:.NET Core 3.0 downloads for Linux, macOS, and Windows。

然后安装。

编辑 csproj 文件

卸载你原有的 WPF 项目,然后右键“编辑 csproj 文件”。将里面所有的内容改为以下代码:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"><PropertyGroup><TargetFramework>netcoreapp3.0</TargetFramework><UseWPF>true</UseWPF><!-- 如果你的项目是 Exe,则设为 WinExe;如果是 WPF 类库,则删掉这一行 --><OutputType>WinExe</OutputType><!-- 如果你的原有项目中有 App.manifest 文件,则在此加入 --><!-- <ApplicationManifest>Properties\App.manifest</ApplicationManifest> --><!-- 如果你的原有项目中有 App.ico 图标,则在此加入 --><!-- <ApplicationIcon>Properties\App.ico</ApplicationIcon> --><!-- 如果你的原有项目中有自定义的 Main 函数,则在此加入 --><!-- <StartupObject>Walterlv.Whitman.Program</StartupObject> --></PropertyGroup><ItemGroup><!-- 如果你的原有项目中有自己添加的图标文件,则在此加入 --><Resource Include="Properties\App.ico" /><!-- 如果你的原有项目中有其他非 .cs、.xaml 文件,则需要在这里加入 --></ItemGroup>
</Project>

编辑 AssemblyInfo.cs 文件

由于在 .NET Core 中,程序集相关的信息是自动生成的,所以原有 AssemblyInfo.cs 中的大量程序集信息是需要删掉的,不然会出现重复 Attribute 的错误。

看以下代码,红色标记 “–” 的代码是需要删掉的,其他的代码保留。

--  using System.Reflection;
--  using System.Resources;
--  using System.Runtime.CompilerServices;using System.Runtime.InteropServices;using System.Windows;--  // General Information about an assembly is controlled through the following
--  // set of attributes. Change these attribute values to modify the information
--  // associated with an assembly.
--  [assembly: AssemblyTitle("Whitman")]
--  [assembly: AssemblyDescription("")]
--  [assembly: AssemblyConfiguration("")]
--  [assembly: AssemblyCompany("")]
--  [assembly: AssemblyProduct("Whitman")]
--  [assembly: AssemblyCopyright("Copyright © walterlv 2018")]
--  [assembly: AssemblyTrademark("")]
--  [assembly: AssemblyCulture("")]
--  // Setting ComVisible to false makes the types in this assembly not visible// to COM components.  If you need to access a type in this assembly from// COM, set the ComVisible attribute to true on that type.[assembly: ComVisible(false)]--  //In order to begin building localizable applications, set
--  //<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
--  //inside a <PropertyGroup>.  For example, if you are using US english
--  //in your source files, set the <UICulture> to en-US.  Then uncomment
--  //the NeutralResourceLanguage attribute below.  Update the "en-US" in
--  //the line below to match the UICulture setting in the project file.
--
--  //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
--
--  [assembly: ThemeInfo(ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located//(used if a resource is not found in the page,// or application resource dictionaries)ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located//(used if a resource is not found in the page,// app, or any theme specific resource dictionaries))]
--
--
--  // Version information for an assembly consists of the following four values:
--  //
--  //      Major Version
--  //      Minor Version
--  //      Build Number
--  //      Revision
--  //
--  // You can specify all the values or you can default the Build and Revision Numbers
--  // by using the '*' as shown below:
--  // [assembly: AssemblyVersion("1.0.*")]
--  [assembly: AssemblyVersion("1.0.0.0")]
--  [assembly: AssemblyFileVersion("1.0.0.0")]

恢复 NuGet 包

打开你原有项目的 packages.config 文件。这里记录了你的项目中已经安装的 NuGet 包。

<?xml version="1.0" encoding="utf-8"?>
<packages><package id="Microsoft.Toolkit.Wpf.UI.XamlHost" version="5.0.0" targetFramework="net471" />
</packages>

我们需要把这个文件里面的内容转换成 PackageReference。按照如下的方式逐一将 package 转换成 PackageReference

<PackageReference Include="Microsoft.Toolkit.Wpf.UI.XamlHost" Version="5.0.0" />

这时,csproj 项目文件的内容如下:

    <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"><PropertyGroup><TargetFramework>netcoreapp3.0</TargetFramework><UseWPF>true</UseWPF><OutputType>WinExe</OutputType><ApplicationManifest>Properties\App.manifest</ApplicationManifest><ApplicationIcon>Properties\App.ico</ApplicationIcon><StartupObject>Walterlv.Whitman.Program</StartupObject></PropertyGroup>
++    <ItemGroup>
++      <PackageReference Include="Microsoft.Toolkit.Wpf.UI.XamlHost" Version="5.0.0" />
++    </ItemGroup><ItemGroup><Resource Include="Properties\App.ico" /></ItemGroup></Project>

如果你觉得这一步骤比较繁琐,那么可以在本文一开始就按照这篇博客的方式进行操作:自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference - walterlv。

编译、运行和修复其他错误

对于比较简单的项目,在经过以上步骤之后,你可能已经可以可以直接跑起来了。

对于复杂一些的项目,你可能会遇到其他的编译或运行错误,你需要适当进行一些修复。而产生这些错误的原因是 csproj 文件中删除了太多的东西。你需要将 <ItemGroup /> 中的一些没有默认添加进来的文件加入进来。

更多

如果你只是希望创建基于 .NET Core 3 的新 WPF 项目,那么请阅读我的另一篇博客:如何创建一个基于 .NET Core 3 的 WPF 项目。

posted on 2018-12-22 22:55 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/10162792.html

将基于 .NET Framework 的 WPF 项目迁移到基于 .NET Core 3相关推荐

  1. 旧 WCF 项目迁移到 asp.net core + gRPC 的尝试

    一个月前,公司的运行WCF的windows服务器down掉了,由于 AWS 没有通知,没有能第一时间发现问题. 所以,客户提出将WCF服务由C#改为JAVA,在Linux上面运行:一方面,AWS对Li ...

  2. 58HouseSearch项目迁移到asp.net core

    首发于:http://codelover.link/ 前言 58HouseSearch这个项目原本是基于ASP.NET MVC 4写的,开发环境是Windows+VS2015,发布平台是linux+m ...

  3. 基于stm32的智能家居项目

    基于stm32的智能家居 具体教程可以看文中的B站链接,上面有手把手教程 本人其他项目链接基于linux的智能仓储项目 基于Qt的人脸识别 移植人脸识别到Linux开发板上 基于正点原子的IMX6UL ...

  4. 简单谈一谈基于SaaS的餐掌柜项目实战

    基于SaaS的餐掌柜项目实战 由于基于SaaS的餐掌柜项目本身是一个较为复杂的系统,代码量也相对较大,因此这里只提供一段简单的代码作为示例: // 定义菜品列表 const menuList = [ ...

  5. 论文总结:基于深度学习的图像风格迁移研究

    基于深度学习的图像风格迁移研究 前言 图像风格迁移方法 基于图像迭代的图像风格迁移方法 基于模型迭代的图像风格迁移方法 卷积神经网络 生成对抗网络 CycleGAN 前言 什么是深度学习? 深度学习是 ...

  6. vs中如和根据项目生成类图_迁移WPF项目到.NET Core

    综述# .NET CORE 3.0开始,桌面端支持WPF了.很多.NET FRAMEWORK的项目已经跑了一阵子了,不是很有必要支持.NET CORE,不过最近用一个程序,为了贯彻一些C# 8的特性, ...

  7. 从零开始制作 NuGet 源代码包(全面支持 .NET Core / .NET Framework / WPF 项目)

    默认情况下,我们打包 NuGet 包时,目标项目安装我们的 NuGet 包会引用我们生成的库文件(dll).除此之外,我们也可以专门做 NuGet 工具包,还可以做 NuGet 源代码包.然而做源代码 ...

  8. uoLib - .Net 项目基础类库 基于C#, 可用于.Net Framework 2.0/3.5, 免费下载使用

    uoLib - .Net 项目基础类库 基于C#, 可用于.Net Framework 2.0/3.5, 免费下载使用 最新程序发布页面:http://uoLib.ourome.com/ 在线帮助文档 ...

  9. .NET项目迁移到.NET Core操作指南

    这篇文章,汇集了大量优秀作者写的关于".NET迁移到.NET Core"资料文章以及微软官方教程文档.是我在迁移公司框架项目到.NET Core和.NET Standard时遇到的 ...

最新文章

  1. FPGA block RAM和distributed RAM区别(以及xilinx 7系列CLB资源)
  2. SQLServer · 最佳实践 · RDS for SQLServer 2012权限限制提升与改善
  3. oracle自带split函数_Pandas 基本使用(三) — DataFrame.to_dict() 函数基本使用
  4. Mac OS安装octave出现的问题-'error:terminal type set to 'unknown'的解决'
  5. 欢乐纪中某A组赛【2019.7.11】
  6. QMap与QHash
  7. 前沿 | 从感知跃升到认知,阿里在人工智能认知领域的探索与应用
  8. PSD分层模板,助你设计出有创意的圣诞海报
  9. 算法第四版 练习答案 1.4.1
  10. 客房预订信息java课设_基于jsp的客房预订系统-JavaEE实现客房预订系统 - java项目源码...
  11. 加拿大标准CAN/ULC-S102与美国标准ASTM E84 一样吗?
  12. 国基北盛-openstack-容器云-环境搭建
  13. 、HTML“计算机输出”标签codekbdsampttvarpre
  14. 基于简单模型KNN——泰坦尼克号获救分析
  15. 为什么那么多的人选择到Java培训机构学习
  16. 【搜索与回溯算法】保卫农场(DFS)
  17. 基于Web的IM简介
  18. listview的属性
  19. lcg_magic算法笔记:反转单链表
  20. 服务器拒接连接问题解决

热门文章

  1. sqlplus操作--文件的输入与输出
  2. 一文读懂 HTTP/2 特性
  3. Codeforces 118 D. Caesar's Legions (dp)
  4. 转载:static的初始化顺序
  5. 有关volatile unsigned long一些说明
  6. w7 全网架构-rsync-备份
  7. java巴特沃斯滤波器编程_巴特沃斯(Butterworth)滤波器 (1)
  8. java 释放指针_C库释放来自Rust的指针
  9. CTF基础理论知识01
  10. 二叉树的先序建树后序输出