8
\$\begingroup\$

I am trying to use the System.Range and System.Index classes with new C# v8.0 construct, see (here). But, I cannot make it work. I have tried under Windows with .NET 5.0 and under Ubuntu with Mono 6 but I got the same result:

First I have changed the .csproj file like that:

<Project Sdk="Godot.NET.Sdk/3.3.0">
  <PropertyGroup>
    <TargetFramework>net472</TargetFramework>
    <LangVersion>8.0</LangVersion>
  </PropertyGroup>
</Project>

Note the <LangVersion> set at 8.0. With that parameter, I can now build the project with this kind of snippet:

int[] nb = {1, 2, 3};
GD.Print(nb[1..2]);

But at runtime, I got this error: Predefined type 'System.Range' is not defined or imported


EDIT: To answer the comments.

I had to add using System.Runtime to make the project able to build.

I had tried to change target framework to .net5.0 (that was only possible on Windows). The project was still able to build but the error at runtime was different:

E 0:00:01.563   debug_send_unhandled_exception_error: System.TypeLoadException: Could not resolve type with token 01000010 from typeref (expected class 'System.Range' in assembly 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')
  <C++ Error>   Unhandled exception
  <C++ Source>  modules/mono/mono_gd/gd_mono_utils.cpp:423 @ debug_send_unhandled_exception_error()

But this answer made me think that the Mono assemblies used at runtime needs net472.

Another hint is that an important Godot project that claims to use C# v8.0, the beautiful Thrive, sets net472 and 8.0 in their config file (see here)

\$\endgroup\$
3
  • \$\begingroup\$ Do you need some using directive to access that feature? Or is it really built into the core language? This site claims Godot can use C# 8.0: docs.godotengine.org/en/stable/getting_started/scripting/… \$\endgroup\$
    – Almo
    Jun 7, 2021 at 21:13
  • \$\begingroup\$ I know little of custom .NET SDKs, but after looking at the source it appears the SDK is based on .NET Standard 2.0, while - according to Microsoft documentation - this requires .NET standard 2.1, .NET Core 3.0 or .NET 5.0 - Also Godot claims to support C# 8.0 and .NET 5.0 (according to Godot 3.3 release notes) - Thus, I'd say open an issue. Edit: wait, hold on, did you change target framework? You say you tried .NET 5.0 but your code snippet says net472. \$\endgroup\$
    – Theraot
    Jun 7, 2021 at 21:26
  • \$\begingroup\$ I have edited the answer according to your remarks. \$\endgroup\$
    – pietrodito
    Jun 8, 2021 at 5:46

1 Answer 1

8
\$\begingroup\$

The issue was coming from TargetFramework!

If the option .net5.0 is not supported by Godot, there is another option to have full System.Runtime feature of C# v8 netstandard2.1:

<Project Sdk="Godot.NET.Sdk/3.3.0">
  <PropertyGroup>
    <TargetFramework>netstandard2.1</TargetFramework>
    <LangVersion>8.0</LangVersion>
  </PropertyGroup>
</Project>

The answer was given by a user called 31 on Github and Discord (see the closed issue here).

\$\endgroup\$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .