迁移到现代化的vs项目结构(sdk project)
安装升级工具
在工具市场搜索 .NET Upgrade Assistant
但是 vs2022后期以及2026貌似将其整合到了ai工具中,ai需要购买pro或联网才能使用之前免费的小工具
https://developercommunity.visualstudio.com/t/Error-Message-when-loading-VS-20206-afte/10971375
可以通过命令行来处理
dotnet tool install -g upgrade-assistant
upgrade-assistant upgrade MyProject.csproj --target-tfm net8.0
所有支持的sdk项目
https://learn.microsoft.com/en-us/dotnet/core/project-sdk/overview
类库项目
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
</Project>
控制台项目
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
</Project>
WPF或Winform项目结构修改
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net45</TargetFramework>
<UseWPF>true</UseWPF>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
</Project>
旧项目.net4.5转.net8再转4.5
如果编译出现错误提示,检查一下引用的程序集,是不是有高于当前框架的版本,比如45引用了6的dll
未知的生成错误“Could not find type 'System.Runtime.Versioning.TargetPlatformAttribute' in assembly 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\Facades\System.Runtime.dll'.”
TargetFramework 应该写 net45 还是 net4.5
https://www.cnblogs.com/trykle/p/19085229
发布
fx项目使用sdk的文件夹发布,没啥问题
后处理事件顺序或文件夹有变化,见混淆预处理那章
编译提示什么平台之类的错误
在slnx里面删除x64 x86之类的配置从新操作
.net版本代号
https://learn.microsoft.com/en-us/dotnet/standard/frameworks
条件编译
预处理符号可以搜索文档中的Preprocessor symbols
和版本代号有一些差别,主要是大写和.转_
#if NET40
MessageBox.Show("40");
#else
MessageBox.Show("45");
#endif
在上方切换运行框架版本

但是好像代码提示不会改变
修改发布后的名称


AssemblyInfo.cs
新项目结构无AssemblyInfo文件,默认是在项目配置中操作
https://learn.microsoft.com/en-us/dotnet/standard/assembly/set-attributes-project-file
可手动添加,并在项目中禁用
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows;
[assembly: AssemblyTitle("YourTool")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("YourTool")]
[assembly: AssemblyCopyright("Copyright © 2022")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
自定义 AssemblyInfo.cs
https://learn.microsoft.com/zh-cn/dotnet/core/project-sdk/msbuild-props#assemblyinfo-properties
如何只是为了修改基本信息,可以在.csproj文件中设置
https://learn.microsoft.com/zh-cn/dotnet/standard/assembly/set-attributes-project-file
示例
<PropertyGroup>
<Company>-</Company>
<FileVersion>1.0.0.0</FileVersion>
<InformationalVersion>1.0.0.0</InformationalVersion>
<Product>-</Product>
<AssemblyTitle>-</AssemblyTitle>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
</PropertyGroup>
参考
https://blog.lindexi.com/post/从以前的项目格式迁移到-VS2017-新项目格式.html#删除多余文件
sln格式转slnx格式
dotnet sln migrate
nuget控制台输出乱码
- 临时解决
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
-
修改系统编码
我不愿意 -
添加配置文件
在nuget控制台输入 $PROFILE 得到配置文件路径
配置文件编码使用 utf8-bom
在... (不知道当时为什么没写完,解决不了,有空再说吧)
浙公网安备 33010602011771号