.NET CORE 3.0开始,桌面端支持WPF了。不少.NET FRAMEWORK的项目已经跑了一阵子了,不是颇有必要支持.NET CORE,不过最近用一个程序,为了贯彻一些C# 8的特性,须要升级项目到.NET CORE 3.1。html
参考官方指导,须要这么几步:shell
原来的nuget使用packages.config进行管理,.netcore已经全面使用<PackageReference>
的形式,所以须要升级。app
升级会弹出一个对话框提示,所有勾选上,直接升级。最后弹出一个升级报告。测试
VS扩展市场查找并运行.NET Portability Analyzer
以分析项目。
优化
报告若是分析结果是
这个样子的,那就没问题。特别关注一下.NET CORE,若是不支持,须要想一想别的办法:.net
最关键的一步来了,须要升级项目文件以便于支持.NET CORE。其实步骤很简单,用vs生成一个基于.NET CORE的WPF项目,而后,直接将csproj文件拷贝到原来的项目文件夹,使用VS添加现有项目,选择这个文件,能够发现原来的东西都自动添加进来了。3d
不过有的项不会自动处理,咱们还须要手动对照一下原来的csproj文件和新的项目csproj文件。看看是否是缺失了一些什么内容。code
PackageReference不会自动处理,引用的其余项目也不会,咱们须要手动粘贴进来。
Resource也不会自动添加,可使用通配符语法<Resource Include="Images\*.png" />
程序的图标须要从新添加。htm
编译以后出现这个错误。
.NET CORE程序会自动根据项目属性生成这个信息,若是还有AssemblyInfo.cs文件,就会冲突。二选一解决这个问题blog
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
,禁用自动生成的功能。有的项目处理完毕以后还有生成错误,能够考虑引用Microsoft.Windows.Compatibility
来解决一些兼容性的问题。
个人项目出现了不少警告,提示项目package不兼容。
若是包持续有人维护的话,通常状况从新安装一下对应的包解决这些问题。
update-package -reinstall
还不行的话,那么有几率你的程序不能正常运行。不想冒险,就须要找找替代了。
好比我手头上的程序,引用了CookComputing.XmlRpcV2
这个包,不支持.NET CORE,可是在网上搜索一下,能够发现Kveer.XmlRPC
是一个移植,直接换就行了。
继续运行,发现一直提示资源文件错误,WPF的Properties.Resources
很差用了...有几种办法能够解决。
最后编译,我这边只有几个警告,没有错误了。鉴于程序能够正常运行,我这有空再优化吧。