故障排除
Get information for troubleshooting Package Manager issues.
阅读时间22 分钟最后更新于 1 个月前
本节提供有关以下问题的信息:
错误类型: | 错误消息: |
|---|---|
| 一般启动问题 | - Package Manager 窗口中的错误消息 - Package Manager 缺失或者窗口无法打开 - 将 Unity 升级到新版本后出现的问题 |
| 包安装问题 | - 包安装失败 - 无法从 Git URL 添加包 - 驱动器空间不足 |
| 包签名问题 | - 包版本没有签名 - 包版本没有有效的签名 |
| 安装 git 依赖关系时的问题 | - 未找到“git”可执行文件 - git-lfs:未找到命令 - 找不到代码仓库 - 无法读取用户名:终端提示被禁用 - 无法更新 Git 版本 |
| 资源商店的资源包 (My Assets) | - My Assets 上下文中出现“无法解析 http 响应” |
| 作用域注册表 | - Package Manager 窗口中缺少“My Registries” |
| 构建包时的问题 | - 缺失 MonoBehaviour 错误 |
如果遇到与网络有关的问题,也可以运行 Unity Package Manager Diagnostics 工具。有关更多信息,请参阅诊断网络问题。
Package Manager 窗口中的错误消息
在 Package Manager 遇到问题时,Package Manager 窗口中会显示错误指示符:
系统作用域的问题
-
网络连接类型

网络错误消息
-
刷新资源时出错(或刷新资源包时出错)如果您的网络无法访问包注册表服务器,可能是因为网络存在连接问题。您或系统管理员诊断和修复网络错误后,状态栏将清空。如果您的网络连接正常,但尚未登录 Unity 帐户,那么 Package Manager 将不会显示任何来自资源商店的资源包。尝试使用 My Assets 上下文时,Package Manager 会提示您登录:

从 Unity 帐户登出
包特有的问题
-

依赖关系错误消息
Package Manager 缺失或者窗口无法打开
Package Manager 窗口可能会移出屏幕或被另一个窗口隐藏。发生这种情况时,Package Manager 窗口似乎无法打开。在这种情况下,可以尝试重置窗口布局(窗口 (Window) > 布局 (Layouts) > 默认 (Default))并重新打开 Package Manager 窗口。
如果 Package Manager 窗口仍未出现,请检查 Unity 控制台窗口:
Failed to resolve packages: The file [<project-path>/Packages/manifest.json] is not valid JSON: Unexpected token '}' at 44:1 }
此错误消息表示 文件格式错误。它还告诉您 Package Manager 无法解析文件的行号,以便可以修复 JSON。您可以使用多个在线验证器来更正问题。保存更正的文件后,Unity 将重新加载 Package Manager 窗口。
manifest.json如果您从更早版本的 Unity 编辑器升级,则包清单文件可能存在其他问题:
-
从 2019.3 开始,您的文件不应包含对 com.unity.package-manager-ui 包的任何引用。从清单的依赖项列表中删除以下行:
manifest.json"com.unity.package-manager-ui": "2.1.1", -
检查项目清单是否使用**“xclude“**作为包版本。这是依赖性属性的过时值。如果找到类似这些的行,请删除整行。Package Manager 仅安装在项目中作为依赖项显式包含的包,因此,一旦删除该条目,Package Manager 将忽略并且不会安装该包。
将 Unity 升级到新版本后出现的问题
当您将项目升级到更高的 Unity 版本时,Package Manager 会自动将不兼容的包更新为更高的兼容版本。但是,如果您的包不能编译,则 Package Manager 会在控制台 (Console) 窗口中显示错误消息。
要处理这些消息,请阅读错误消息并尽可能解决所有问题。例如,一个包可能缺少对另一个包或版本的依赖。在这种情况下,您可以尝试自己安装该包。
您也可以按照以下顺序来尝试每个解决方案,直到找到可行的解决方案:
- 备份项目下的 文件夹,然后再删除该文件夹。
Packages - 备份项目的 文件夹中的包来源文件,然后将它们删除,只留下
Packages文件。然后尝试重新加载项目。manifest.json - 创建一个新的空项目。如果 Package Manager 窗口加载无误,请将失败项目中的 文件夹替换为新创建的项目的同一文件夹。
Library/PackageCache/com.unity.package-manager-ui
包安装失败
如果您尝试从注册表安装新的包但无法安装,可能是由于权限问题所致。
必须对缓存文件夹具有完整权限:
- Windows(用户帐户):
%LOCALAPPDATA%\Unity\cache\upm - Windows(系统用户):
%ALLUSERSPROFILE%\Unity\cache\upm - macOS:
$HOME/Library/Caches/Unity/upm - Linux:
$HOME/.cache/Unity/upm
有时,学校、政府机关或受网络保护的工作场所等机构环境会设置代理服务器来控制网络与互联网之间的通信,并使用自己的服务器证书,而 Unity 或 Package Manager 无法识别这些证书。请与您的网络管理员联系。
无法从 Git URL 添加包
请参阅找不到代码仓库。
驱动器空间不足
如果您的安装驱动器空间不足或空间不足,请考虑以下解决方案:
包版本没有签名
从作用域注册表获取 Unity 包时,可能会出现此消息。Unity 会对其创建的包进行签名,但较旧的包除外,这些包不一定会在后续版本中重新签名。如果将未签名的 Unity 包从作用域注册表复制到另一个注册表,Package Manager 无法确定包内容是否安全,以及是否与原始包一致。
如果收到此消息,请尝试以下解决方案:
- 使用包的另一个版本。
- 从 Unity Registry 获取 Unity 包。
- 如果您拥有作用域注册表,请确保从 Unity Registry 复制包的最新版本。
包版本没有有效的签名
包具有签名,可确保内容在传输之前或传输过程中未更改。无效签名通常发生在以下情况:
- 有人在自己的注册表上发布了经过修改的包。
- 将文件传输到终端用户时发生错误。
在上述两种情况下,Package Manager 会认为该包可能有恶意风险。
当遇到签名无效时,可以尝试安装该包的其他版本。此外,应避免使用 Unity Registry 以外的注册表中的 Unity 包。
如果要共享一个已修复问题的 Unity 包,请考虑使用 Git URL 或将包嵌入到项目中。
未找到“git”可执行文件
如果尝试从 git URL 安装包,则会出现与此类似的消息:
Cannot perform upm operation: Unable to add package[https://github.example.com/myuser/myrepository.git]:No 'git' executable was found. Please install Git on your system and restart Unity [NotFound]UnityEditor.EditorApplication:Internal_CallUpdateFunctions()
git-lfs:未找到命令
如果尝试下载使用 Git LFS(大型文件存储)的包,则可能会收到以下错误消息:
Error when executing git command. git-lfs filter-process: command not found.
这表明您的计算机上可能未安装 Git LFS。若要确保安装,请在命令行上进行测试:
git lfs --version
如果命令返回如下类似内容,则会安装 Git LFS:
git-lfs/2.8.0 (GitHub; darwin amd64; go 1.12.7)
Repository not found
如果 Package Manager 找不到您指定的代码仓库,Unity 控制台将显示错误消息:
Cannot perform upm operation: Unable to add package [https://mycompany.github.com/gitproject/com.mycompany.mypackage.git]: Error when executing git command. fatal: repository 'https://mycompany.github.com/gitproject/com.mycompany.mypackage.git/' not found [NotFound]UnityEditor.EditorApplication:Internal_CallUpdateFunctions() (at /Users/builduser/buildslave/unity/build/Editor/Mono/EditorApplication.cs:310)
请检查您的拼写。为了确保使用正确的 URL,请访问代码仓库的页面,然后通过克隆 (Clone) 按钮复制 URL:

在 GitHub (A) 和 GitLab (B) 上将 URL 复制到的位置
单击 GitHub (A) 或 GitLab (B) 上 URL 右侧的按钮以将 URL 复制到剪贴板。
如果代码仓库的位置正确,则 URL 可能存在另一个问题:
-
如果您的目标是特定修订版本,请确保您的修订版本排在最后。例如:
https://github.example.com/myuser/myrepository1.git#revision -
如果您的目标是修订版本并且包不在根处,请确保查询参数位于修订版本锚点之前。例如:
pathhttps://github.example.com/myuser/myrepository.git?path=/example/folder#v1.2.3
如果代码仓库的位置和 URL 正确,请检查 系统环境变量。确保 变量包含 Git 目录 (Windows) 和 Git 目录 (Windows、macOS) 的条目。Package Manager 进程需要在 变量中输入这些条目。
PATHPATHcmdbinPATHCould not read Username: terminal prompts disabled
如果您尝试从需要身份验证的专用代码仓库安装包,则在 Unity 控制台中会出现以下类似的消息:
Cannot perform upm operation: Unable to add package [https://mycompany.github.com/gitproject/com.mycompany.mypackage.git]: Error when executing git command. fatal: could not read Username for 'https://mycompany.github.com': terminal prompts disabled [NotFound]UnityEditor.EditorApplication:Internal_CallUpdateFunctions() (at /Users/builduser/buildslave/unity/build/Editor/Mono/EditorApplication.cs:310)
通常,出现此消息是由于:Package Manager 没有提供用来输入 HTTP 的用户名和密码或者输入口令短语来解锁 SSH 密钥的交互式终端或对话框。
-
如果使用 HTTP(S),每次登录 Bitbucket、GitHub 或 GitLab 时,都需要在终端或对话框中输入用户名和密码。但是,Package Manager 没有提供用来输入 HTTP(S) 的用户名和密码的交互式终端或对话框。若要绕过此问题,请使用适用于的 HTTPS 解决方案中建议的解决方法之一。
-
但是,如果您设置了一个口令短语来保护 SSH 密钥的安全,则仍然需要在终端或对话框中输入该口令短语以便授权密钥。在这种情况下,可以使用 SSH 代理,它可解锁您的 SSH 密钥以代表您向 Package Manager 进行身份验证。
适用于 HTTPS 的解决方案
Package Manager 没有提供用来输入 HTTP(S) 用户名和密码的交互式终端或对话框。要绕过这一点,请使用下列其中一种变通方法:
- 请遵循通过 HTTPS Git URL 访问私有代码仓库和配合使用受口令短语保护的 SSH 密钥与 SSH Git URL 中的说明。
- 使用凭据管理器(Git Credential Manager for Windows 或 OSXKeyChain)。凭据管理器无需使用终端或命令提示符即可处理密码发送。
- 从终端或命令提示符窗口中使用 git-credentials,然后,从同一终端启动 Hub,以便 Unity 可以访问缓存或存储的凭证。
- 请改用 SSH 进行身份验证。如果您在没有口令短语的情况下设置 SSH 密钥,则 Package Manager 无需将其解密即可向 Git 服务器进行身份验证。如果您决定使用口令短语增加安全性,可以在 macOS 或 Windows上使用 ssh-agent 应对身份验证问题。
适用于 SSH 的解决方案
如果您使用 SSH 协议通过 Git URL 安装包,则可能会从 Git 收到身份验证错误。当您在受口令短语保护的本地计算机上设置私有 SSH 密钥时,通常会发生这种情况。
此问题的解决方案是设置 SSH 代理,它可解锁您的 SSH 密钥以代表您向 Package Manager 进行身份验证。按照与您操作系统对应的部分中的说明进行操作:
设置 OpenSSH for Windows
内置 Windows OpenSSH 版本的 ssh-agent 比 Git for Windows 默认提供的版本效果更好。此过程说明如何设置 OpenSSH 客户端并将密钥添加到其 ssh-agent。如果使用 Git for Windows,则还可以使内置 Windows OpenSSH 优先于 Git for Windows SSH 代理:
-
确保安装了 OpenSSH 客户端。为此,请在 Windows 的设置可选功能窗口中搜索该功能(开始 (Start) > 设置 (Settings),然后搜索“可选功能”)。这适用于 Windows 10+。
-
检查环境变量以确保显示内置 Windows OpenSSH 位置(例如,
%PATH%)。C:\WINDOWS\System32\OpenSSH\注意:如果已在使用 Git for Windows,请确保在变量中,内置 Windows OpenSSH 位置出现在 Git for Windows SSH 位置之前。这可确保 Windows 使用内置 Windows OpenSSH 代理而不是 Git for Windows SSH 代理。%PATH% -
在 PowerShell 终端中,启动进程并确保它自动启动:
ssh-agent# Set the ssh-agent service to start automatically and manually start it nowGet-Service ssh-agent | Set-Service -StartupType Automatic# Run the ssh-agent process to start the ssh-agent servicessh-agent -
将密钥导入 ssh-agent。为此,请在命令行上运行,然后按照说明进行操作。默认情况下,代理会添加
ssh-add密钥并提示您输入密码。%USERPROFILE%\.ssh\id_rsa# Import the keyssh-add若要使用不同的密钥,可以将它指定为参数:# Set the ssh-agent service to start automatically and manually start it nowssh-add <your-secure-ssh-key-name>如果不记得密钥的名称,请使用以下命令来列出密钥:ssh-add -l -
如果您安装了 Git for Windows,请重置环境变量以确保 Git 始终使用内置 Windows OpenSSH 版本的 ssh-agent:
%GIT-SSH%[Environment]::SetEnvironmentVariable("GIT_SSH", "$((Get-Command ssh).Source)", [System.EnvironmentVariableTarget]::User)
将 SSH 密钥添加到适用于 macOS 的 SSH 代理
使用 命令可将 SSH 密钥添加到在 macOS 系统上运行的 ssh-agent。使用的命令参数取决于 macOS 版本:
ssh-add-
在 macOS 11 及更早版本上,使用:ssh-add -K ~/.ssh/<your-secure-ssh-key-name>
-
在 macOS 12 或更高版本上,使用:ssh-add --apple-use-keychain ~/.ssh/<your-secure-ssh-key-name>
运行此命令后,终端会要求输入密码以解锁您的 SSH 密钥,然后将它添加到 macOS 密钥链。但是,一旦您重新启动系统,存储在 ssh-agent 中的每个密钥都会重置。
若要防止在重新启动系统后重新输入密码,请打开 文件(如果找不到,则创建一个),并添加以下内容:
~/.ssh/configHost * UseKeychain yes AddKeysToAgent yes IdentityFile ~/.ssh/<your-secure-ssh-key-name>
重新启动计算机以应用这些更改。
无法更新 Git 版本
如果您尝试从代码仓库将 Git 依赖关系更新到较新版本,但它不起作用,则可能是因为 Git 依赖关系已锁定。如果要从代码仓库将 Git 依赖关系更新到较新版本,请使用从 Git URL 添加包 (Add package from git URL) 按钮并输入 Git URL。有关更多信息,请参阅已锁定的 Git 依赖关系。
My Assets 上下文中出现“无法解析 Http 响应”
当您尝试从资源商店下载资源包时,如果在控制台窗口中收到以下消息,那么您的资源包缓存可能存在问题:
[PackageManager] Error Failed to parse response. UnityEditor.AsyncHTTPClientone(State, Int32)要解决此问题,请从下载资源包文件的位置删除所有下载的资源,然后尝试再次下载资源。
警告:如果您的项目包含大量资源数据,重新下载所有内容可能需要大量时间和带宽。
Package Manager 窗口中缺少“My Registries”
并非所有注册表提供程序都与 Unity 的 Package Manager 兼容。如果添加的包注册表服务器未实现 或 终端,则作用域注册表与 Unity 的 Package Manager 不兼容,不会出现在 Package Manager 窗口的导航面板中 My Registries 上下文中。
/-/v1/search/-/all缺失 MonoBehaviour 错误
在构建期间,如果有许多关于缺失行为的错误,则 UnityLinker 可能会错误地剥离它认为未引用的组件。它这样做的原因通常是剥离级别太激进。例如,如果 AssetBundle 中有一个预制件引用 2D SpriteShape 包中的 SpriteShape 组件,则对象可能会缺失并且可能会生成编译器警告。
若要解决此问题,可以降低 UnityLinker 的剥离级别或是在 文件内声明包的程序集以防止这些程序集遭到剥离:
link.xml<linker> <assembly fullname="Unity.2D.SpriteShape.Runtime" preserve="all"/> <assembly fullname="Unity.2D.Common.Runtime" preserve="all"/> </linker>
有关剥离级别和 UnityLinker 的更多信息,请参阅托管代码剥离。