首页 > 编程学习 > 改造一个NET4.5的WPF项目到NET6

改造一个NET4.5的WPF项目到NET6

发布时间:2022/10/1 0:39:28

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

文章目录

前言

一、改造思路?

二、改造步骤

1.手动升级csproj项目文件

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

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



前言

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

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

一、改造思路?

1.手动升级csproj项目文件

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

二、改造步骤

1.手动升级csproj项目文件

代码如下:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
	  <OutputType>WinExe</OutputType>
	  <TargetFramework>net6.0-windows</TargetFramework>
	  <Nullable>enable</Nullable>
	  <UseWPF>true</UseWPF>
	  <PackageIcon>logo.ico</PackageIcon>
  </PropertyGroup>
  <ItemGroup>
    <None Remove="Image\cov.png" />
    <None Remove="logo.ico" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="Image\cov.png">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="logo.ico">
      <Pack>True</Pack>
      <PackagePath>\</PackagePath>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="AduSkin" Version="1.1.1.9" />
    <PackageReference Include="CommunityToolkit.Mvvm" Version="8.0.0" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\ChromeTabs\ChromeTabs.csproj" />
  </ItemGroup>
  <ItemGroup>
    <Compile Update="Properties\Resources.resx">
      <DesignTimeSharedInput>True</DesignTimeSharedInput>
      <AutoGen>True</AutoGen>
      <DependentUpon>Resources.resx</DependentUpon>
    </Compile>
  </ItemGroup>
  <ItemGroup>
    <Compile Update="Properties\Resources.Designer.cs">
      <DesignTimeSharedInput>True</DesignTimeSharedInput>
      <AutoGen>True</AutoGen>
      <DependentUpon>Resources.resx</DependentUpon>
    </Compile>
  </ItemGroup>
  <ItemGroup>
    <None Update="Properties\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
    </None>
  </ItemGroup>
  <ItemGroup>
    <Compile Update="Properties\Settings.Designer.cs">
      <DesignTimeSharedInput>True</DesignTimeSharedInput>
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
    </Compile>
  </ItemGroup>
  <ItemGroup>
    <None Update="Properties\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
    </None>
  </ItemGroup>
  <ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
    <PackageReference Include="CommunityToolkit.Mvvm">
      <Version>8.0.0</Version>
    </PackageReference>
    <PackageReference Include="System.Management">
      <Version>6.0.0</Version>
    </PackageReference>
  </ItemGroup>
</Project>

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

老项目使用的第三方包:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="CommonServiceLocator" version="2.0.2" targetFramework="net45" />
  <package id="MvvmLight" version="5.4.1.1" targetFramework="net45" />
  <package id="MvvmLightLibs" version="5.4.1.1" targetFramework="net45" />
</packages>

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

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

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

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

命名空间替换

using GalaSoft.MvvmLight

替换成

using CommunityToolkit.Mvvm.ComponentModel;

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

详细代码如下:

//using GalaSoft.MvvmLight;
using CommunityToolkit.Mvvm.ComponentModel;
using System.Windows.Media;

namespace AZai.ViewModel
{
    public abstract class TabBase : ObservableObject//ViewModelBase
    {
        private int _tabNumber;
        public int TabNumber
        {
            get => _tabNumber;
            set
            {
                if (_tabNumber != value)
                {
                    SetProperty(ref _tabNumber, value);
                }
            }
        }

        private string _tabName;
        public string TabName
        {
            get => _tabName;
            set
            {
                if (_tabName != value)
                {
                    SetProperty(ref _tabName, value);
                }
            }
        }


        private bool _isPinned;
        public bool IsPinned
        {
            get => _isPinned;
            set
            {
                if (_isPinned != value)
                {
                    SetProperty(ref _isPinned, value);
                }
            }
        }


        private ImageSource _tabIcon;
        public ImageSource TabIcon
        {
            get => _tabIcon;
            set
            {
                if (!Equals(_tabIcon, value))
                {
                    SetProperty(ref _tabIcon, value);
                }
            }
        }
    }
}

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

 

Copyright © 2010-2022 mfbz.cn 版权所有 |关于我们| 联系方式|豫ICP备15888888号