记录一次VS2022无法附加到Unity3D2022的情况

目前【暂时】解决了问题,整个过程扑朔迷离到以至于我不知道如何去形容这次遇见的情况。
搜遍全网,国内目前没有可以解决这个问题的博客。有可能仅使用于我自己的情况。
外网unity社区也有相关的问题
遗憾的是,这个问题提出一年多了,仍然没有确切的解决方法。也许只在少数人的电脑上会出现这样的情况。

版本

Visual Studio Community 2022,
Unity 2022.1.18f1c1(事实上2021版本也出现了这样的情况)

出现的问题

这里可以确保环境和组件没有任何问题。
点击VS中的附加到Unity,经过短暂的等待后,没有发生任何事情。下面出现这样的提示
在这里插入图片描述
目标计算机积极拒绝,无法连接。(VS2019甚至不会出现这样的提示。升级到2022后我才排除了VS的问题)
理论上,56800端口应该是Unity进程应该开启监听的端口,我使用netstat查找后并没有发现有这个端口
在这里插入图片描述

最诡异的事情是,这种情况是概率事件。在我几十上百次的尝试中,在外部条件相同的情况下,有时候仅仅是重启了unity,就能成功附加。这是最让人摸不着头脑的情况。
目前暂时得出结论,是Unity开启监听端口时出现了问题。理应开启的端口没有开启。

此外,偶尔会出现“操作无法完成。未指定的错误”的弹窗,原因不明

尝试过的办法

  1. 重启电脑——并不奏效
  2. 重启VS——经过数十次的重启后,事实证明对该问题没有任何的解决
  3. 重启Unity——重复打开同一个工程文件
    在我多达几十次的尝试中,只有在某次刚开机的两次重启中能够成功让VS附加到unity,后面均失效。只有在极少数重启中(大概几十次出现一次吧),可以成功附加
  4. 重新安装VS——我曾重装过VS2019两次,并不奏效
  5. 升级VS——我将VS2019升级到VS2022,在第一次附加时成功附加,之后重试时仍然失败
  6. 重装Unity——从Unity2021升级到2022,并不奏效
  7. 关闭防火墙——检查了防火墙所有规则并关闭了所有防火墙,并不奏效
  8. 删除项目文件中的.vsconfig文件和.vs文件夹——完全不奏效
  9. 在Extern tool选项中重新定向VS,包括手动将其指向 devenv.exe——自欺欺人的做法,完全不奏效
  10. 关闭杀毒软件——不奏效
  11. 关闭其他应用程序——很难完全关闭所有应用程序,不能确定是不是这里出现了问题,但至少我关闭了很多程序,并不会解决问题。
  12. 重新创建一个Unity项目——仍然不能附加,因此排除了乱设置Unity项目配置的情况
  13. 重新构建VS解决方案——不奏效,目前基本排除VS出的问题
  14. 寻找所谓的Preference -> External Tools -> Editor Attaching选项,实际上这只有在unity2019以下的版本才有这个选项
  15. 删除我所有的 Unity Library/obj/log/temp 文件夹并重建整个项目——重建项目并不奏效

并没有选择重装系统或者重买电脑,这是我最后的倔强。

暂时解决的办法

提前说明一下,该方法并不能完全解决问题,只是将附加失败的概率从99%降低到了30%,仍然会出现一些我无法掌握的情况。很有可能在某次重启后,这个方法也不再奏效了。
这个方法来自于unity3D外网社区的一个帖子。
记录一次VS2022无法附加到Unity3D2022的情况_第1张图片

如图所示,将Edit->Preferences->External Tool 中的Generate .csproj files for中的复选框仅保留Player project,然后点击Regenerrate project files 重新构建文件,之后重启Unity即可。
另外,外网也有点击Regenerrate project files以重新构建项目就能解决的情况。在这里我的建议是,不管复选框 里你选了哪些选项,这个按钮你都得点击,并多次尝试。
记录一次VS2022无法附加到Unity3D2022的情况_第2张图片

值得一提的是,当允许VS附加到Unity时,我的Unity往往会发出如下警告

在这里插入图片描述
至今没有查找到该警告的相关资料,但通常出现这个警告后我的VS才能附加到Unity中。
PS:后面又出现了一次没有警告也能附加的情况。我实在晕了。

接下来在VS中查看一下Unity实例。点击 调试->附加Unity调试程序:
记录一次VS2022无法附加到Unity3D2022的情况_第3张图片

可以看到Unity开放了56276端口.
使用端口查询指令,发现Unity开放了56276的TCP监听端口,现在一个VS实例与该端口建立通信,现在是正常的情况。
在这里插入图片描述
该方法有一定失败的可能性。如果附加仍然失败,将之前取消勾选的Generate .csproj files for中的选项选上,再次重新构建项目,重启unity,反复尝试即可。

总结&猜测

寻找解决方法至今寻找了三天,目前我也不敢说自己成功解决了问题。在写这篇博客的同时我仍在反复尝试,但仍然经常出现附加失败的情况。
这里仅做一个猜测:Unity在启动的时候会从56000往上的端口随机选取一个端口作为监听其他IDE调试的端口,有时候会遇到一些不可抗拒的因素导致端口开放失败,也许是进程占用,也许是操作系统的问题,也许是Unity内部的一些BUG。总之,Unity尝试打开一个端口失败,却把这个端口号传递给了VS,VS试图与这个端口进行连接,最后以失败告终。
重新构建项目和反复重启Unity的目的也许是让Unity反复尝试寻找到一个真正能打开的端口。
最后,在真正解决这个问题之前,如果某次VS成功附加上了Unity,那就尽量不要关掉Unity了,万一再也成功不了呢。

你可能感兴趣的:(unity,游戏引擎)