迁移WPF项目到.NET CORE
综述
.NET CORE 3.0开始,桌面端支持WPF了。很多.NET FRAMEWORK的项目已经跑了一阵子了,不是很有必要支持.NET CORE,不过最近用一个程序,为了贯彻一些C# 8的特性,需要升级项目到.NET CORE 3.1。
方法
参考官方指导,需要这么几步:
- 了解并更新 NuGet 依赖项:
- 升级NuGet以使用格式。
- 查看.NET Core或.NET Standard的顶级NuGet依赖项兼容性。
- 将NuGet包升级到较新版本。
- 使用.NET Portability Analyzer分析依赖项。
- 将项目文件迁移到新的SDK样式格式:
- 选择是同时生成.NET Core和 .NET Framework,还是仅支持.NET Core。
- 将相关的项目文件属性和项复制到新项目。
- 修复生成问题:
- 添加对Microsoft.Windows.Compatibility兼容性包的引用。
- 查找并修复API-level差异。
- 删除app.config中appSettings和connectionStrings以外的部分。
- 如有必要,重新生成自动生成的代码。
- 运行时测试:
- 确认移植的应用按预期工作。
- 注意NotSupportedException异常。
升级nuget引用
原来的nuget使用packages.config进行管理,.netcore已经全面使用<PackageReference>的形式,因此需要升级。

升级会弹出一个对话框提示,全部勾选上,直接升级。最后弹出一个升级报告。
.NET Framework移植分析
VS扩展市场查找并运行.NET Portability Analyzer以分析项目。

报告如果分析结果是

这个样子的,那就没问题。特别关注一下.NET CORE,如果不支持,需要想想别的办法:
- 替换这个引用/方法
- 升级对应的包
升级项目文件
最关键的一步来了,需要升级项目文件以便于支持.NET CORE。其实步骤很简单,用vs生成一个基于.NET CORE的WPF项目,然后,直接将csproj文件拷贝到原来的项目文件夹,使用VS添加现有项目,选择这个文件,可以发现原来的东西都自动添加进来了。
不过有的项不会自动处理,我们还需要手动对照一下原来的csproj文件和新的项目csproj文件。看看是不是缺失了一些什么内容。
PackageReference不会自动处理,引用的其他项目也不会,我们需要手动粘贴进来。
Resource也不会自动添加,可以使用通配符语法<Resource Include="Images\*.png" />
程序的图标需要重新添加。
编译之后出现这个错误。

.NET CORE程序会自动根据项目属性生成这个信息,如果还有AssemblyInfo.cs文件,就会冲突。二选一解决这个问题
- 删除assemblyinfo.cs,不过原来的csproj文件将不可用。
- 在新项目文件中添加
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>,禁用自动生成的功能。
修复生成问题
有的项目处理完毕之后还有生成错误,可以考虑引用Microsoft.Windows.Compatibility来解决一些兼容性的问题。
我的项目出现了很多警告,提示项目package不兼容。

如果包持续有人维护的话,一般情况重新安装一下对应的包解决这些问题。
update-package -reinstall
还不行的话,那么有概率你的程序不能正常运行。不想冒险,就需要找找替代了。
比如我手头上的程序,引用了CookComputing.XmlRpcV2这个包,不支持.NET CORE,但是在网上搜索一下,可以发现Kveer.XmlRPC是一个移植,直接换就好了。
继续运行,发现一直提示资源文件错误,WPF的Properties.Resources不好用了...有几种办法可以解决。
- 删除resx文件,将生成属性设置为resource并使用Uri参考
- 删除resx文件,将生成属性设置为Embedded Resource并使用集成资源参考
- 删除resx文件,将生成属性设置为Content并设置总是复制到目标目录,直接读取文件。
总结
最后编译,我这边只有几个警告,没有错误了。鉴于程序可以正常运行,我这有空再优化吧。
迁移WPF项目到.NET CORE的更多相关文章
- 将 Net 项目升级 Core项目经验:(一)迁移Net项目为Net Core\Standard项目
迁移Net项目为Net Core\Standard项目 背景: 我们公司内部有自己ORM开发框架,最新因为需要将系统迁移到国产服务器上,所以首先需要将最基础的ORM框架改造可以运行在国产服务器上.对于 ...
- 将基于 .NET Framework 的 WPF 项目迁移到基于 .NET Core 3
在 Connect(); 2018 大会上,微软发布了 .NET Core 3 Preview,以及基于 .NET Core 3 的 WPF:同时还发布了 Visual Studio 2019 预览版 ...
- 如何创建一个基于 .NET Core 3 的 WPF 项目
在 Connect(); 2018 大会上,微软发布了 .NET Core 3 Preview,以及基于 .NET Core 3 的 WPF:同时还发布了 Visual Studio 2019 预览版 ...
- 使用 DotNet CLI 创建自定义的 WPF 项目模板
描述 当我们安装完 DotNetCore 3.0 版本的 SDK 后,我们就可以创建基于 DotNetCore 的 WPF 项目模板,通过如下 CLI 可以方便快捷的创建并运行我们的项目: dotne ...
- 《Dotnet9》系列-开源C# WPF项目强力推荐
时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...
- 《Dotnet9》系列-开源C# WPF项目1《Accelerider.Windows》强力推荐
时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...
- WinForms项目升级.Net Core 3.0之后,没有WinForm设计器?
目录 .NET Conf 2019 Window Forms 设计器 .NET Conf 2019 2019 9.23-9.25召开了 .NET Conf 2019 大会,大会宣布了 .Net Cor ...
- 用Visual C++创建WPF项目的三种主要方法
用Visual C++创建WPF项目的三种主要方法 The problem with using XAML from C++ Because C++ doesn't support partial c ...
- WPF外包公司——北京动点飞扬软件:开发企业WPF项目需要掌握些什么
做为企业开发一个WPF项目,对于很多不熟悉微软WPF技术和XAML语言开发团队而言,北京动点飞扬在此给各位一点建议: 1.首先开发团队要整体对于XAML和WPF的运作机制熟悉. 2.开发人员起码要会用 ...
随机推荐
- 【Jenkins】插件更改国内源
最近调试脚本,本机安装了Jenkins,但是安装插件时一直失败.更改升级站点也不生效,究其原因是因为default.json中插件下载地址还https://updates.jenkins.io,升级站 ...
- 在数组添加元素时报错:IndexError: list index out of range
今天第一次发随笔还有许多不足之处,欢迎评论!!! 最近在写一个成语接龙的小游戏,结果在数组添加元素时报错:IndexError: list index out of range 源码: import ...
- vue-cli目录结构分析
vue3初始化一个项目,查看其项目结构,会发现比vue2的更加简洁. package.json说明 项目的配置文件,定义了项目的基本信息以及项目的相关包依赖,npm运行命令等,位于项目根目录. scr ...
- mac上搭建mysql环境配置和Navicat连接mysql
mac上搭建mysql环境配置 1.下载mysql for mac: https://downloads.mysql.com/archives/community/ 注意:mysql版本要和你的MAC ...
- Oracle计算数值型的幂次方——POWER()
Oracle计算数值型的幂次方 简介:幂次方就是幂函数的变形,在POWER(value1,value2)中,value1就是函数的底数,value2就是函数的指数.如:POWER(value1,val ...
- [linux] 小问题:管道符,换行问题等;[nginx]启动,重启,关闭命令;以及升级nginx切换命令
Lniux换行问题 后面回车不会马上执行本条命令而是换行继续. : 是运行完前面就继续后面的, && 同样是前面正确就运行后面, || 是前面运行不正确就运行后面. | 管道符“|”将 ...
- 吃瓜的正确姿势,Python绘制罗志祥词云图
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 这篇文章中向大家介绍了Python绘制词云的方法,不难看出绘制词云可以说是一 ...
- Springboot:员工管理之修改员工(十(8))
构建员工修改请求 com\springboot\controller\EmployeeController.java /*调转到员工修改页 携带员工信息 restful风格*/ @GetMapping ...
- 从"UDF不应有状态" 切入来剖析Flink SQL代码生成
从"UDF不应有状态" 切入来剖析Flink SQL代码生成 目录 从"UDF不应有状态" 切入来剖析Flink SQL代码生成 0x00 摘要 0x01 概述 ...
- ubuntu17.10安装lnmp安装包的核心问题-gcc版本、g++版本
大致碰到的问题都是这样,不是php安装失败,就是MySQL安装失败,或者Nginx也安装失败 基本上是花式报错.后来在军哥的论坛中找到了这个帖子:https://bbs.vpser.net/viewt ...