- 检查 Unity 中是否安装了 Visual Studio 插件。 “
Help / About
”应会在底部显示一条类似“Microsoft Visual Studio Tools for Unity 已启用”的消息。
- Unity 2020.x+:检查你是否使用了“
Window / Package Manager
”中最新的 Visual Studio 编辑器包。
- 尝试删除项目中的所有项目/解决方案文件和
.vs
文件夹。
- 尝试使用“
Open C# Project
”或“Edit / Preferences / External tools / Regenerate Project files
”重新创建项目/解决方案。
- 确保已在 Visual Studio 中安装游戏/Unity 工作负荷。
- 尝试清理 MEF 缓存,如此处所述。
- 尝试重新安装 Visual Studio(仅使用游戏/Unity 工作负荷来启动)。
- 尝试禁用第三方扩展,以防它们可能干扰“
Tools / Extensions
”中的 Unity 扩展。
请勿直接从资产处理器或任何其他工具接触项目文件。 如果确实需要对项目文件进行操作,我们为此公开了 API。 请检查程序集引用问题部分。
如果遇到其他重载或 Visual Studio 在重载时丢失所有打开的窗口,请确保安装有合适的 .NET 目标包。 查看以下部分,了解有关框架的详细信息。
调试程序不会异常中断
使用旧版 Unity 运行时(.NET 3.5 等效版本)情况下,未处理异常时(在 try/catch 块外部),调试程序将始终中断。 如果已处理了异常,则调试程序将使用异常设置窗口来确定是否需要中断。
借助新的运行时(.NET 4.6 等效版本),Unity 引入了一种管理用户异常的新方法,因此即使所有异常都在 try/catch 块外部,也会将这些异常视为“用户已处理”。 这就是希望调试程序中断时,需要在“异常设置”窗口显式检查它们的原因。
在“异常设置”窗口(“调试”>“窗口”>“异常设置”)中,针对某个类别的异常(例如,表示 .NET 异常的公共语言运行时异常)展开节点,并选中想要在该类别中捕获的特定异常的复选框(例如,System.NullReferenceException)。 还可以选择整个类别的异常。
在 Windows 上,Visual Studio 会要求下载 Unity 目标框架
当使用旧版 Unity 运行时(相当于 .NET 3.5)时,需要为 Visual Studio Tools for Unity 安装 .NET Framework 3.5(默认情况下 Windows 8 或 10 上未安装)。 若要解决此问题,请按照说明下载并安装 .NET framework 3.5。
使用新的 Unity 运行时还需要 .NET 目标包版本 4.6 或 4.7.1,具体取决于 Unity 版本。 可以使用 Visual Studio 安装程序快速安装它们(修改安装、单个组件、.NET 类别,并选择所有 4.x 目标包)。
程序集引用或项目属性问题
如果项目中存在复杂引用,或者如果希望能更好地控制此生成步骤,可以使用我们的 API 来操作生成的项目或解决方案内容。 也可以在 Unity 项目中使用响应文件,我们将对它们进行处理。
使用最新的 Visual Studio 和 Unity 版本时,最好的方法就是使用自定义 Directory.Build.props
文件和生成的项目。 然后,你将能够在不干扰生成过程的情况下参与项目结构。
带有警告的断点
如果 Visual Studio 无法找到特定断点的源位置,系统会在断点附近显示一条警告消息。 检查当前的 Unity 场景中是否已正确加载/使用你正在使用的脚本。
未命中断点
检查当前的 Unity 场景中是否已正确加载/使用你正在使用的脚本。 退出 Visual Studio 和 Unity,然后删除生成的所有文件(.csproj、.sln)、.vs
文件夹和整个“库”文件夹。 有关 C# 调试的详细信息,请参阅 Unity 网站。
无法调试 Android 播放器
我们使用多播进行播放器检测(这是 Unity 使用的默认机制),但之后我们会使用常规 TCP 连接来附加调试器。 检测阶段是 Android 设备的主要问题。
Wifi 是通用的,但与 USB 比起来非常慢,因为存在延迟。 我们已经了解,某些路由器或设备缺少正确多播支持(众所周知,Nexus 系列就存在这个问题)。
USB 调试速度非常快,Visual Studio Tools for Unity 现可检测 USB 设备,并与 adb 服务器对话,使其正确转接接口以进行调试。
IntelliSense 或代码着色出现问题
尝试将 Visual Studio 升级到最新版本。 尝试执行与不兼容的项目相同的故障排除步骤。
在 Visual Studio Tools for Unity 中存在一些已知问题,是由调试器与 Unity 的旧版本的 C# 编译器的交互方式导致的。 我们正设法帮助解决这些问题,但在此期间,你可能会遇到以下问题:
在调试时,Unity 有时会崩溃。
在调试时,Unity 有时会冻结。
有时单步执行和跳出方法的方式不正确,尤其是在迭代器中或在 switch 语句内。
请在遇到崩溃、冻结或其他错误时发送错误报告以帮助我们改进 Visual Studio Tools for Unity 的质量。 这可以帮助我们调查并修复 Visual Studio Tools for Unity 中的问题。 谢谢!
如何在 Visual Studio 冻结时报告错误
有报告表明使用 Visual Studio Tools for Unity 进行调试时 Visual Studio 有时会冻结,但我们需要更多的数据来了解这个问题。 你可以通过执行下面的步骤来帮助我们调查。
在 Windows 上:
打开 Visual Studio 的新实例。
打开“附加到进程”对话框。 在 Visual Studio 的新实例中的主菜单上,选择“调试” 、“附加到进程” 。
将调试器附加到 Visual Studio 的已冻结的实例。 在“附加到进程” 对话框中,从“可用进程” 表中选择 Visual Studio 的已冻结实例,然后选择“附加” 按钮。
暂停调试器。 在 Visual Studio 的新实例中的主菜单上,依次选择“调试”、“全部中断”或只需按 Ctrl + Alt + Break 即可 。
创建线程转储。 在命令窗口中,输入以下命令并按 Enter:
Debug.ListCallStack /AllThreads /ShowExternalCode
你可能首先需要使“命令” 窗口可见。 在 Visual Studio 中的主菜单上,选择“视图” 、“其他窗口” 、“命令窗口” 。
在 Mac 上:
打开终端并获取 Visual Studio for Mac 的 PID:
ps aux | grep "[V]isual Studio.app"
启动 lldb 调试程序:
使用 PID 附加到 Visual Studio for Mac 实例:
process attach --pid THE_PID_OF_THE_VSFM_PROCESS
检索所有线程的 stacktrace:
bt all
最后,将线程转储以及 Visual Studio 冻结时你正在执行的操作的说明一起发送到 vstusp@microsoft.com。
- Visual Studio 故障排除
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:https://aka.ms/ContentUserFeedback。
提交和查看相关反馈