草庐IT

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

_夕 2023-04-24 原文

目前【暂时】解决了问题,整个过程扑朔迷离到以至于我不知道如何去形容这次遇见的情况。
搜遍全网,国内目前没有可以解决这个问题的博客。有可能仅使用于我自己的情况。
外网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外网社区的一个帖子。

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

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


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

接下来在VS中查看一下Unity实例。点击 调试->附加Unity调试程序:

可以看到Unity开放了56276端口.
使用端口查询指令,发现Unity开放了56276的TCP监听端口,现在一个VS实例与该端口建立通信,现在是正常的情况。

该方法有一定失败的可能性。如果附加仍然失败,将之前取消勾选的Generate .csproj files for中的选项选上,再次重新构建项目,重启unity,反复尝试即可。

总结&猜测

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

有关记录一次VS2022无法附加到Unity3D2022的情况的更多相关文章

  1. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  2. ruby-on-rails - Railstutorial : db:populate vs. 工厂女孩 - 2

    在railstutorial中,作者为什么选择使用这个(代码list10.25):http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-usersnamespace:dbdodesc"Filldatabasewithsampledata"task:populate=>:environmentdoRake::Task['db:reset'].invokeUser.create!(:name=>"ExampleUser",:email=>"example@railstutorial.org",:passwo

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  5. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  6. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  7. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  8. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  9. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  10. ruby - 无法覆盖 irb 中的 to_s - 2

    我在pry中定义了一个函数:to_s,但我无法调用它。这个方法去哪里了,怎么调用?pry(main)>defto_spry(main)*'hello'pry(main)*endpry(main)>to_s=>"main"我的ruby版本是2.1.2看了一些答案和搜索后,我认为我得到了正确的答案:这个方法用在什么地方?在irb或pry中定义方法时,会转到Object.instance_methods[1]pry(main)>defto_s[1]pry(main)*'hello'[1]pry(main)*end=>:to_s[2]pry(main)>defhello[2]pry(main)

随机推荐