在Unity中使用dynamic keyword / .NET 4.6功能

时间:2017-08-10 14:30:37

标签: c# database unity3d

我正在尝试将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?

这是统一编辑器错误,这似乎与visual studio中的错误相同

2 个答案:

答案 0 :(得分:7)

第一步是检查Unity是否从MS site识别出这两个基本的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 即可。然后&#34;字符串插值&#34;特征:

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

如果他们给你错误,那么问题是只是dynamic关键字,但问题是Visual Studio无法识别正在设置的 .NET 版本统一。

在评论部分,Unity无法编译第一个示例。

逐个完成这些步骤以获得可能的解决方法。 跳过它们。

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

2 。转到编辑 - &gt;项目设置 - &gt;播放器 - &gt;其他设置 - &gt;配置 - &gt; Api兼容级别 - &gt; .NET 4.6

3 .Restart Unity Editor和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.2 dynamic关键字时没有任何问题。此外,GraphQL工作正常。

答案 1 :(得分:1)

我似乎找到了解决方法

导航到Edit > Project Settings > Player > Other Settings > Configuration > API Compatibility Level,然后从.NET Standard 2.0更改为.NET 4.x

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

让我知道这是否有用