摘要:
- 工程从.NET Framework 4.8升级到.NET 8.0,即使采用官方方案也是很繁琐的一件事情,而且容易出问题。
- Windows 11内置了.NET Framework 4.8,所以当前的软件需要基于.NET Framework 4.8。但后续微软推出Windows 12,将内置更高版本的.NET版本,如何让软件跟随微软步伐快速平稳升级?
- 本文叫你如何打破微软封印,在VS2022中如何高屋建瓴面向未来优雅地创建.NET Framework 4.8工程。
关键工作流程:
- 创建新项目,【WPF 应用程序】
- 选择框架【.NET 8.0(长期支持)】
- 基于.NET 8.0的工程文件【HAPTICCAL.csproj】
xml
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWPF>true</UseWPF>
<RootNamespace>FirstSolver</RootNamespace>
<ApplicationIcon>$(AssemblyName).ico</ApplicationIcon>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<Authors>秦建辉</Authors>
<AssemblyVersion>4.3.0</AssemblyVersion>
<FileVersion>$(AssemblyVersion)</FileVersion>
<NeutralLanguage>zh-Hans</NeutralLanguage>
<StartupObject>FirstSolver.Program</StartupObject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="C2VColorEdit" Version="3.0.0" />
<PackageReference Include="C2VLanguage" Version="3.0.0" />
<PackageReference Include="HPSocket.Net" Version="5.9.3.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLogHelper" Version="3.0.0" />
<PackageReference Include="NLogViewer" Version="3.0.0" />
<PackageReference Include="TF_Communication_CS" Version="3.0.4" />
</ItemGroup>
<ItemGroup>
<Resource Include="..\TF.png" Link="TF.png" />
<Resource Include="$(AssemblyName).ico" />
</ItemGroup>
<ItemGroup>
<None Update="Languages\en-US\$(AssemblyName).json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Languages\zh-Hans\$(AssemblyName).json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Languages\zh-Hant\$(AssemblyName).json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="$(AssemblyName)_Config.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="PowerShell.exe -ExecutionPolicy RemoteSigned -Command "&'$(ProjectDir)PostBuild.ps1' '$(TargetDir)' '$(ProjectPath)' '$(AssemblyName)'"" />
</Target>
</Project>
- 如图所示更改工程文件【HAPTICCAL.csproj】,重点:TargetFramework改成TargetFrameworks
- 新的工程文件【HAPTICCAL.csproj】
xml
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFrameworks>net480</TargetFrameworks>
<UseWPF>true</UseWPF>
<RootNamespace>FirstSolver</RootNamespace>
<ApplicationIcon>$(AssemblyName).ico</ApplicationIcon>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<Authors>秦建辉</Authors>
<AssemblyVersion>4.3.0</AssemblyVersion>
<FileVersion>$(AssemblyVersion)</FileVersion>
<NeutralLanguage>zh-Hans</NeutralLanguage>
<StartupObject>FirstSolver.Program</StartupObject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="C2VColorEdit" Version="3.0.0" />
<PackageReference Include="C2VLanguage" Version="3.0.0" />
<PackageReference Include="HPSocket.Net" Version="5.9.3.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLogHelper" Version="3.0.0" />
<PackageReference Include="NLogViewer" Version="3.0.0" />
<PackageReference Include="TF_Communication_CS" Version="3.0.4" />
</ItemGroup>
<ItemGroup>
<Resource Include="..\TF.png" Link="TF.png" />
<Resource Include="$(AssemblyName).ico" />
</ItemGroup>
<ItemGroup>
<None Update="Languages\en-US\$(AssemblyName).json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Languages\zh-Hans\$(AssemblyName).json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Languages\zh-Hant\$(AssemblyName).json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="$(AssemblyName)_Config.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="PowerShell.exe -ExecutionPolicy RemoteSigned -Command "&'$(ProjectDir)PostBuild.ps1' '$(TargetDir)' '$(ProjectPath)' '$(AssemblyName)'"" />
</Target>
</Project>
- 出现异常,然后【卸载项目】,再【重新加载项目】。
- 面向未来升级到.NET 8.0只需要修改"net480",将"net480"改为"net8.0-windows"即可。