提示:此文章是记录第三方开源WPF模板由net4.5升级到net6的详细过程
550c2c52-44af-41c0-abc1-d47f6d12718a
前言
被改造的开源项目: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的详细步骤,效果图如下: