码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 改造一个NET4.5的WPF项目到NET6


    提示:此文章是记录第三方开源WPF模板由net4.5升级到net6的详细过程

    文章目录

    前言

    一、改造思路?

    二、改造步骤

    1.手动升级csproj项目文件

    2.升级项目中使用到的第三方包

    3.改造项目代码里面的Mvvm的模型代码


    550c2c52-44af-41c0-abc1-d47f6d12718a


    前言

    被改造的开源项目:Azai: 一个测试git的wpf项目

    改造后的开源项目:Azai: 使用NET6改造的WPF UI模板项目

    一、改造思路?

    1.手动升级csproj项目文件

    2.升级或者替换项目中使用到的第三方包

    二、改造步骤

    1.手动升级csproj项目文件

    代码如下:

    1. "Microsoft.NET.Sdk">
    2. WinExe
    3. net6.0-windows
    4. enable
    5. true
    6. logo.ico
    7. "Image\cov.png" />
    8. "logo.ico" />
    9. "Image\cov.png">
    10. Always
    11. "logo.ico">
    12. True
    13. \
    14. Always
    15. "AduSkin" Version="1.1.1.9" />
    16. "CommunityToolkit.Mvvm" Version="8.0.0" />
    17. "Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
    18. "..\ChromeTabs\ChromeTabs.csproj" />
    19. "Properties\Resources.resx">
    20. True
    21. True
    22. Resources.resx
    23. "Properties\Resources.Designer.cs">
    24. True
    25. True
    26. Resources.resx
    27. "Properties\Settings.settings">
    28. SettingsSingleFileGenerator
    29. Settings.Designer.cs
    30. "Properties\Settings.Designer.cs">
    31. True
    32. True
    33. Settings.settings
    34. "Properties\Settings.settings">
    35. SettingsSingleFileGenerator
    36. Settings.Designer.cs
    37. "'$(TargetFramework)' == 'netcoreapp3.1'">
    38. "CommunityToolkit.Mvvm">
    39. 8.0.0
    40. "System.Management">
    41. 6.0.0

    2.升级项目中使用到的第三方包

    老项目使用的第三方包:

    1. "1.0" encoding="utf-8"?>
    2. <packages>
    3. <package id="CommonServiceLocator" version="2.0.2" targetFramework="net45" />
    4. <package id="MvvmLight" version="5.4.1.1" targetFramework="net45" />
    5. <package id="MvvmLightLibs" version="5.4.1.1" targetFramework="net45" />
    6. packages>

    CommonServiceLocator替换成微软官方的依赖注入组件【Microsoft.Extensions.DependencyInjection】。

    MvvmLight和MvvmLightLibs由于nuget上的包一标记成弃用,所以使用新的包【CommunityToolkit.Mvvm】。

    AduSkin包直接升级成最新版本的包,就可以了。

    3.改造项目代码里面的Mvvm的模型代码

    命名空间替换

    using GalaSoft.MvvmLight

    替换成

    using CommunityToolkit.Mvvm.ComponentModel;

     以前继承的模型父类由【ViewModelBase】改成【ObservableObject】;【Set】方法改成【SetProperty】。

    详细代码如下:

    1. //using GalaSoft.MvvmLight;
    2. using CommunityToolkit.Mvvm.ComponentModel;
    3. using System.Windows.Media;
    4. namespace AZai.ViewModel
    5. {
    6. public abstract class TabBase : ObservableObject//ViewModelBase
    7. {
    8. private int _tabNumber;
    9. public int TabNumber
    10. {
    11. get => _tabNumber;
    12. set
    13. {
    14. if (_tabNumber != value)
    15. {
    16. SetProperty(ref _tabNumber, value);
    17. }
    18. }
    19. }
    20. private string _tabName;
    21. public string TabName
    22. {
    23. get => _tabName;
    24. set
    25. {
    26. if (_tabName != value)
    27. {
    28. SetProperty(ref _tabName, value);
    29. }
    30. }
    31. }
    32. private bool _isPinned;
    33. public bool IsPinned
    34. {
    35. get => _isPinned;
    36. set
    37. {
    38. if (_isPinned != value)
    39. {
    40. SetProperty(ref _isPinned, value);
    41. }
    42. }
    43. }
    44. private ImageSource _tabIcon;
    45. public ImageSource TabIcon
    46. {
    47. get => _tabIcon;
    48. set
    49. {
    50. if (!Equals(_tabIcon, value))
    51. {
    52. SetProperty(ref _tabIcon, value);
    53. }
    54. }
    55. }
    56. }
    57. }

     以上就是升级Azai WPF项目到NET6的详细步骤,效果图如下:

     

  • 相关阅读:
    Linux下安装MySQL
    #案例:演示 web 自动化测试环境是否 OK(针对:Chrome 浏览器)
    MS14-068 漏洞分析—不安全的PAC
    C++ day4
    it运维监控运维方案主要应用在哪些场景
    修改ubuntu服务器fs文件最大打开数
    OSEK标准ISO_17356汇总介绍
    监听页面滚动位置定位底部按钮(包含页面初始化定位不对鼠标滑动生效的解决方案)
    谷歌员工年薪中位数是苹果的4倍多,亚马逊CEO薪酬抵6千名员工 | 科技巨头薪资排名出炉
    Go Web开发GoFrame+Vue+ElementUI框架实战教程
  • 原文地址:https://blog.csdn.net/allenwdj/article/details/127118291
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号