为什么我的C#6代码无法在Unity中编译?


9

为什么Unity无法使用C#6代码?它总是给我编译器错误。以下是一些代码示例:

using static System.Convert;
using static System.Environment;

$"€{punten}{NewLine}€{Money}{NewLine}€{KilledEnemies}{NewLine}€{bonus}{NewLine}€{total}";

我使用Visual Studio作为我的代码编辑器,并且构建时没有错误。如果我在Unity中按播放,它将无法建立。


搜索unity .net profile upgrade在谷歌
matth

Answers:


18

Unity使用基于.NET3.5的旧版Mono运行时。就功能而言,它使用C#3和4之间的值。

我通过四处搜寻发现了这一点。不知道它是否有效,但可能值得研究。


值得注意的是,将来有计划升级到新的.NET配置文件(unity3d.com/unity/roadmap)。但是,考虑到路线图中所述的先决条件,我们只会最早在2016年底才发生这种情况,很可能要到2017
某个

7
此答案中的链接已消失,现在返回404 :(
ashes999 '16

7
这就是为什么人们不提供提要就不应该在stackexchange上发布链接的原因。
菲利普

根据(forum.unity3d.com/threads/…),该工具已不再开发/支持。一个替代方法是(bitbucket.org/alexzzzz/unity-c-5.0-and-6.0-integration/src),尽管它有缺陷(例如Visual Studio忘记了它),但我还是亲自使用了,或者期待@BenAdams回答,以获取更好的消息。
Khale_Kitha '16


4

YouTube上的这段视频演示了如何通过创建一个新项目,将目标.Net Framework更改回3.5,将build和release输出目录设置到Unity项目资产文件夹以及添加一个.NET Framework来使C#6语法在Unity上工作。对UnityEngine dll的引用。调试功能似乎相同。


2

Visual Studio中的编译器比Unity中的编译器具有更多的功能,这意味着某些代码(尤其是较新的c#功能)会在Unity中给出错误,但在Visual Studio中不会。

但是,您可以更改目标框架以匹配最接近Unity在编辑器中使用的框架。在为Unity开发库时,我已经在Xamarin中做到了这一点,但是看起来在Visual Studio中也是可能的。

在Visual Studio中,在DLL项目的属性中,将Target框架属性设置为您正在使用的Unity框架版本。这是与您的项目目标的API兼容性相匹配的Unity基类库,例如Unity完整库,微型库或Web基类库。这样可以防止您的DLL调用其他框架或兼容性级别中存在的框架方法,但是您正在使用的Unity框架版本中可能不存在。

https://msdn.microsoft.com/zh-CN/library/dn940020.aspx


您可能要指出,在为Windows以外的其他平台进行构建时,使用其他目标框架可能会导致问题。
菲利普
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.