类型 Task<> 存在于 Unity.Tasks 和 mscorelib 中(Unity 问题)
Type Task<> exists in both Unity.Tasks and mscorelib (Unity Question)
我 运行 遇到了一个令人恼火的问题。我在我的项目中使用 System.Threading.Tasks。我最近导入了一个新插件 (Google Firebase),它附带了自己的 dll (Unity.Tasks)。好吧,Google 的天才们似乎没有意识到 Unity 完全支持 System.Threading.Tasks,并决定将该命名空间与他们的 dll 捆绑在一起。我无法摆脱 Unity.Tasks 否则它会破坏 Firebase。我不能使用外部别名来引用 mscorelib,否则我会收到错误消息,指出我的代码没有 return a Task<>(在我使用别名之前确实如此)。我不知道我应该在这里做什么。我真的很想使用firebase,因为它很容易实现,但我还需要在我的项目中使用Tasks来进行异步编程。有人有什么好主意吗?
注意:我使用的是 Unity 2020 beta 2 和 .Net 4.0 以及 IL2CPP 后端。我尝试过 .NET 2.0、单声道后端和 Unity 2019.x。没有成功。任何帮助表示赞赏。
此外:我确实检查了所有其他 Stack Overflow 答案,其中 none 将适用于我的实例。我都试过了。
Here is a screenshot of the error thrown in Visual Studio
出于向后兼容的原因,Firebase SDK 中提供了重复的任务实现。如果您导入了 dotnet4
文件夹,默认情况下不应启用它,但是如果您丢失了 .meta
文件(或 Library
目录,如果您不使用 .meta
文件)或一直在手动调整构建设置(例如:在编写 .asmdef
文件时引入错误的依赖项),您可能会再次引入不正确的依赖项。
勾选Assets/Parse/Plugins
确保基本级别 Unity.Tasks
和 Unity.Compat
已禁用(如果需要,您可以删除它们)。
并确保 dotNet45
文件夹中的 dll 已启用:
你应该可以开始了!
顺便说一句:您可能想知道我们为什么要包括 Unity.Tasks
。 Firebase 不会针对原始任务实现进行编译,dotNet45
实现转发了一些函数并确保无需重写任何代码即可使用 Firebase。
既然我已经给了你这个简短的概述,你还可以做一件事。 Support for the Unity Package Manager 刚刚发布。如果您使用的是受支持的 Unity 版本(2018.4 或更高版本),则可以将 Firebase 移至 UPM。然后,所有这些文件都将移动到 Library
文件夹,并有望自动保持清洁以供您继续使用。有一些小问题(例如:我上次检查时修补 gradleTemplate.gradle
不太有效,这是一个可选功能),但它总体上可能是一个更清晰的集成(并且应该随着时间的推移而改进)。
希望对您有所帮助!
--帕特里克
我 运行 遇到了一个令人恼火的问题。我在我的项目中使用 System.Threading.Tasks。我最近导入了一个新插件 (Google Firebase),它附带了自己的 dll (Unity.Tasks)。好吧,Google 的天才们似乎没有意识到 Unity 完全支持 System.Threading.Tasks,并决定将该命名空间与他们的 dll 捆绑在一起。我无法摆脱 Unity.Tasks 否则它会破坏 Firebase。我不能使用外部别名来引用 mscorelib,否则我会收到错误消息,指出我的代码没有 return a Task<>(在我使用别名之前确实如此)。我不知道我应该在这里做什么。我真的很想使用firebase,因为它很容易实现,但我还需要在我的项目中使用Tasks来进行异步编程。有人有什么好主意吗?
注意:我使用的是 Unity 2020 beta 2 和 .Net 4.0 以及 IL2CPP 后端。我尝试过 .NET 2.0、单声道后端和 Unity 2019.x。没有成功。任何帮助表示赞赏。
此外:我确实检查了所有其他 Stack Overflow 答案,其中 none 将适用于我的实例。我都试过了。
Here is a screenshot of the error thrown in Visual Studio
出于向后兼容的原因,Firebase SDK 中提供了重复的任务实现。如果您导入了 dotnet4
文件夹,默认情况下不应启用它,但是如果您丢失了 .meta
文件(或 Library
目录,如果您不使用 .meta
文件)或一直在手动调整构建设置(例如:在编写 .asmdef
文件时引入错误的依赖项),您可能会再次引入不正确的依赖项。
勾选Assets/Parse/Plugins
确保基本级别 Unity.Tasks
和 Unity.Compat
已禁用(如果需要,您可以删除它们)。
并确保 dotNet45
文件夹中的 dll 已启用:
你应该可以开始了!
顺便说一句:您可能想知道我们为什么要包括 Unity.Tasks
。 Firebase 不会针对原始任务实现进行编译,dotNet45
实现转发了一些函数并确保无需重写任何代码即可使用 Firebase。
既然我已经给了你这个简短的概述,你还可以做一件事。 Support for the Unity Package Manager 刚刚发布。如果您使用的是受支持的 Unity 版本(2018.4 或更高版本),则可以将 Firebase 移至 UPM。然后,所有这些文件都将移动到 Library
文件夹,并有望自动保持清洁以供您继续使用。有一些小问题(例如:我上次检查时修补 gradleTemplate.gradle
不太有效,这是一个可选功能),但它总体上可能是一个更清晰的集成(并且应该随着时间的推移而改进)。
希望对您有所帮助!
--帕特里克