【问题标题】:Use the dynamic keyword/.NET 4.6 feature in Unity在 Unity 中使用动态关键字/.NET 4.6 功能
【发布时间】:2017-08-10 14:30:37
【问题描述】:

我正在尝试将 GraphQL 实现到 Unity3D(版本 2017.1.0f3 Personal)中。我正在使用 .NET 4.6(实验),但尽管如此,Unity 不支持动态关键字。这很奇怪,因为 .NET 4.0 它是 .NET 的一部分。除了在 Unity 中。我在谷歌上搜索一些如何让它工作的解决方案,但没有动态关键字的解决方案。错误是这样的:

Severity    Code    Description Project File    Line    Suppression State
Error   CS1980  Cannot define a class or member that utilizes 'dynamic' 
because the compiler required type 
'System.Runtime.CompilerServices.DynamicAttribute' cannot be found. Are you 
missing a reference?    skiing-prototype (1)    D:\skiing-prototype 
(1)\Assets\Scripts\GraphQL.cs   62  Active

这是使用 GraphQL C# 客户端的唯一警告。有没有人尝试过让它工作?我还没有发现任何更大的努力来启动和运行它。

编辑:

我在这里使用这个客户端:https://github.com/bkniffler/graphql-net-client

这也是来自 Visual Studio 的错误,但在 Unity 控制台中也显示错误,会立即更新确切内容

Assets/Scripts/GraphQL.cs(80,16): error CS1980: Dynamic keyword requires 
`System.Runtime.CompilerServices.DynamicAttribute' to be defined. Are you 
missing System.Core.dll assembly reference?

这是unity editor错误,好像和visual studio一样

【问题讨论】:

  • 您引用的是 Microsoft.CSharp.dll 吗?见here
  • 不,我没有,因为在 Unity 下,我无法从 Visual Studio 中传递任何类型的 dll,仅来自此插件文件夹
  • 也是因为这个错误 CS1703: 已经导入了具有相同标识的程序集“Microsoft.CSharp”。考虑删除其中一个引用 Assets/Plugins/Microsoft.CSharp.dll(与先前错误相关的符号位置)Microsoft.CSharp.dll(与先前错误相关的符号位置)编译失败:1 个错误,0警告
  • Visual Studio 版本是多少?
  • visual studio 2017 社区

标签: c# database unity3d


【解决方案1】:

第一步是检查 Unity 是否识别来自MS site 的这 2 个基本 C# 6 功能。

1.尝试“索引初始化器”功能:

private Dictionary<int, string> webErrors = new Dictionary<int, string>
{
    [404] = "Page not Found",
    [302] = "Page moved, but left a forwarding address.",
    [500] = "The web server can't come out to play today."
};

2。然后是“字符串插值”功能:

private string FirstName = "";
private string LastName = "";
public string FullName => $"{FirstName} {LastName}";

如果他们给你错误,那么问题不仅仅是 dynamic 关键字,而是 Visual Studio 无法识别 Unity 设置的 .NET 版本的问题。

在评论部分,您的 Unity 未能编译第一个示例。


逐一完成这些步骤以获得可能的修复。不要不要跳过它们。

1。转到编辑--> 项目设置--> 播放器--> 其他设置--> 配置--> 脚本运行时版本--> 实验性(.Net 4.6 等效)。

2.进入编辑 --> 项目设置 --> 播放器 --> 其他设置 --> 配置 --> Api 兼容级别 --> .NET 4.6

3.重新启动 Unity 编辑器和 Visual Studio。您必须重新启动两者。

测试上述两个 C# 功能。如果它们有效,那么 dynamic 关键字也应该如此。如果他们不这样做,则继续进行#4。

4.更新 Visual Studio。这个非常重要。将 Visual Studio 更新到最新版本/补丁。

5。如果您仍然无法编译上述 C#6 功能,请重新安装 Visual Studio 和 Unity,然后执行步骤 #1 和 #2 再次因为一些文件丢失。

6。最后,如果您让 C#6 的两个功能都正常工作,但动态关键字仍然不工作,则从 Unity 2017.1 更新到 Unity 2017.2。此版本修复了许多 .NET 问题。

请注意,我使用 Unity 2017.2dynamic 关键字没有任何问题。此外,GraphQL 工作正常。

【讨论】:

  • 如果上面列出的 1 和 2 功能有效但动态仍然无效,这意味着什么?
  • 我有 UNity 2017.2.0b8
  • @JDOaktown 这是问题还是评论?
  • 我必须使用 System.Collections.Generic 插入;为了使这个“字典”声明起作用。
【解决方案2】:

我好像找到了解决办法

导航到Edit &gt; Project Settings &gt; Player &gt; Other Settings &gt; Configuration &gt; API Compatibility Level 并从.NET Standard 2.0 更改为.NET 4.x

这立即消除了编译器错误,并允许我使用 dynamic 关键字运行代码。

让我知道这是否有用

【讨论】:

    猜你喜欢
    • 2014-03-17
    • 2019-04-19
    • 2010-10-01
    • 2011-05-06
    • 1970-01-01
    • 2016-10-02
    • 2018-01-18
    • 2017-12-19
    相关资源
    最近更新 更多