迁移到现代化的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
可手动添加,并在项目中禁用
false

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控制台输出乱码

  1. 临时解决
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
  1. 修改系统编码
    我不愿意

  2. 添加配置文件
    在nuget控制台输入 $PROFILE 得到配置文件路径
    配置文件编码使用 utf8-bom
    在... (不知道当时为什么没写完,解决不了,有空再说吧)

posted @ 2023-02-04 11:31  trykle  阅读(2)  评论(0)    收藏  举报