打破微软封印面向未来创建.NET Framework4.8工程

摘要:

  1. 工程从.NET Framework 4.8升级到.NET 8.0,即使采用官方方案也是很繁琐的一件事情,而且容易出问题。
  2. Windows 11内置了.NET Framework 4.8,所以当前的软件需要基于.NET Framework 4.8。但后续微软推出Windows 12,将内置更高版本的.NET版本,如何让软件跟随微软步伐快速平稳升级?
  3. 本文叫你如何打破微软封印,在VS2022中如何高屋建瓴面向未来优雅地创建.NET Framework 4.8工程。

关键工作流程:

  1. 创建新项目,【WPF 应用程序】
  1. 选择框架【.NET 8.0(长期支持)】
  1. 基于.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 &quot;&amp;'$(ProjectDir)PostBuild.ps1' '$(TargetDir)' '$(ProjectPath)' '$(AssemblyName)'&quot;" />
  </Target>

</Project>
  1. 如图所示更改工程文件【HAPTICCAL.csproj】,重点:TargetFramework改成TargetFrameworks
  1. 新的工程文件【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 &quot;&amp;'$(ProjectDir)PostBuild.ps1' '$(TargetDir)' '$(ProjectPath)' '$(AssemblyName)'&quot;" />
  </Target>

</Project>
  1. 出现异常,然后【卸载项目】,再【重新加载项目】。
  2. 面向未来升级到.NET 8.0只需要修改"net480",将"net480"改为"net8.0-windows"即可。
相关推荐
Azure DevOps14 小时前
Azure DevOps Server:2026年4月份补丁(安装详细步骤)
运维·microsoft·azure·devops
AI先驱体验官15 小时前
臻灵:数字人+大模型,实时交互的技术临界点在哪里
大数据·人工智能·深度学习·microsoft·重构·开源·交互
我是唐青枫17 小时前
C#.NET ValueTaskSource 深入解析:零分配异步、ManualResetValueTaskSourceCore 与使用边界
c#·.net
xier_ran19 小时前
【C++】static 关键字与 const 关键字的作用
java·数据库·microsoft
2401_8326355820 小时前
小白分享如何Go 语言中的图形界面开发:从 GUI 到 WebAssembly
microsoft·golang·wasm
AI周红伟21 小时前
周红伟:微软正在开发类OpenClaw风格的企业级智能体
microsoft·copilot
小白学大数据1 天前
Python 实现可交互滑块拼图,图形拖拽移动无卡顿
爬虫·python·microsoft·交互
.NET修仙日记1 天前
2026 .NET 面试八股文:高频题 + 答案 + 原理(基础核心篇)
云原生·面试·职场和发展·c#·.net·面试题·微软技术
code tsunami1 天前
如何在车辆数据自动化中解决Cloudflare Turnstile
运维·microsoft·自动化
FreeBuf_2 天前
Microsoft Defender 0Day漏洞可导致权限提升攻击
microsoft