您当前的位置:首页 > 文章 > VS2022升级.Net7导致原来的.Net6项目编译失败,错误编码:NETSDK1045

VS2022升级.Net7导致原来的.Net6项目编译失败,错误编码:NETSDK1045

作者:Lingbug 时间:2023-07-05 阅读数:549 人阅读

记一次VS2022升级.Net7导致原来的.Net6项目编译失败,最后不断排查直到解决的思路与心得【错误编码:NETSDK1045】(sdk排查 -> 分析器排查 -> VS2022升级日志排查)


什么问题?
.net6的项目编译失败,提示【NETSDK1045 当前 .NET SDK 不支持将 .NET 6.0 设置为目标。请将 .NET 5.0 或更低版本设置为目标,或使用支持 .NET 6.0 的 .NET SDK 版本。】


如何出现的该问题?
把VS2022升级到最新版本(17.4),升级完之后,之前的.net5项目都可以正常编译成功,但是.net6的项目编译失败,提示该错误。

错误分析
1.上述报错的意思就是当前检测到的.net sdk最高只支持到.net5,要想编译此项目,要么将该项目设置为.net5,要么就去下载.net6 sdk;
2.我本地一直是有.net6 sdk的,这个项目之前也是可以正产编译运行的;
3.用命令dotnet --list-sdks,也是可以看到我本地.net5,.net6,.net7的sdk都有的;


尝试的解决办法
重新修复VS2022,再次检查.net6相关组件是否都已勾选
重新修复VS2022,再次检查以及确认.net6相关组件都已勾选,然后电脑重启,重新打开项目,仍然提示该错误。

将VS2022版本回滚(和VS版本关系应该不大,故放弃)
一直提示的.net sdk版本的问题,所以和VS版本应该没啥关系,最后实在是没有办法的话可以再尝试这一步,但是这个肯定不是解决问题的核心,肯定是回滚带来的.net sdk版本的变化。

技术群请教(未得到有效的答案)
在几个技术群里说明了该问题,但是大家大部分都没有遇到过这种问题,有几个给出的答案是.net sdk版本不对,但是并没有给出实际的解决办法。

自己思考,琢磨…(此轮耗时最久)
自己想了很多,也尝试了很多解决方案,但是问题并没有解决。

找到问题方向(.net分析器)
思考良久,突然发现一个思路突破口,编译不通过,看了下,项目依赖的分析器是黄的,也就意味着提示sdk不正确,加上我电脑本身一直是有.net6 sdk的,故问题方向可以确定:
本机有.net6 sdk,但是分析器解析结果不出来,解析出来的结果是没有.net6 sdk的。

顺着.net分析器向下排查
看了项目的分析器报黄,而且直接给出了分析器的位置,说明是使用的这个位置的分析器解析的项目的csproj的targetFramework对应的.net sdk:
1.找到该位置的dotnet.exe,点击分析器同文件夹的sdk文件夹进去,发现确实只有.net5 sdk,并没有.net6 sdk,也没有.net7 sdk;



2.上述结果说明,哪怕我现在有一个.net7的项目,只要不是自己创建的,现在打开依然编译不通过,还是分析器的问题;
3.此时已经很清晰了,分析器解析的是同级的sdk文件夹中的sdk,如果没有相应版本的,编译就会不通过,提示该异常;
4.只需要找到电脑里.net6的sdk,然后复制一份到该文件夹即可编译成功;


解决问题(将.net6 sdk放在分析器解析的文件夹中)
1.VS安装自己会带.net sdk,通常是在【C:\Program Files\dotnet】这个文件夹;
2.我们打开这个文件夹,里面有一个sdk的文件夹,打开,果然,里面.net5,.net6,.net7的sdk都在;


3.将.net6 sdk的文件夹,复制到刚刚.net分析器统计的sdk文件夹;
4.重启VS,重新生成项目,perfect,生成成功!


刨根问底(为何VS2022升级,会将.net sdk都移动了位置,或者说.net的分析器的位置都改变了?)
之前没问题,升级了VS就出现了该问题,究竟为何,我来看下升级日志:
1.打开cmd,输入%temp%,打开系统临时文件夹,里面会有系统最近的操作日志;
2.我们要找.net6,那么就直接在文件夹搜索【.NET_SDK_6】,然后等待搜索结束,慢慢排查,这都是.net6 sdk相关的日志;


3.通过排查发现,今晚升级VS时,.net6 sdk确实是升级到了最新版本,添加位置也是正常位置【C:\Program Files\dotnet】,但是为何新升级的.net sdk在默认文件夹,而不在.net分析器对应的文件夹里呢?
4.应该是由于我之前.net5的项目,自己下载了.net5 sdk,然后没有和VS默认安装的路径一致导致的,后续使用我这个自定义路径的.net分析器,就找不到系统默认安装的sdk了。

Ending
Ending~
————————————————
版权声明:本文为CSDN博主「Lingbug」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37886901/article/details/123400607

本站大部分文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了您的权益请来信告知我们删除。邮箱:1451803763@qq.com