Skip to content

Change the C# compiler (csc) used on your Unity project, as you like!

License

Notifications You must be signed in to change notification settings

VolodymyrBS/CSharpCompilerSettingsForUnity

 
 

Repository files navigation

C# Compiler Settings For Unity

Change the C# compiler (csc) used in your Unity project, as you like!

PRs Welcome

<< Description | Installation | Usage | Contributing >>





Description

A good news! Unity 2020.2.0a12 or later now supports C# 8.0!

Many developers (including you!) have been eagerly awaiting support for C# 8.0.
C# 8.0 includes some features and some useful syntax-sugars:

  • Readonly members
  • Default interface methods
  • Pattern matching enhancements:
    • Switch expressions
    • Property patterns
    • Tuple patterns
    • Positional patterns
  • Using declarations
  • Static local functions
  • Disposable ref structs
  • Nullable reference types
  • Asynchronous streams
  • Asynchronous disposable
  • Indices and ranges
  • Null-coalescing assignment
  • Unmanaged constructed types
  • Stackalloc in nested expressions
  • Enhancement of interpolated verbatim strings

However, unfortunately, there are no plans to backport to Unity 2020.1 or earlier...


This package changes the C# compiler (csc) used in your Unity project, to support C# 8.0.
Let's enjoy C# 8.0 features with your Unity project!

Features

  • Easy to use.
    • This package is out of the box!
  • Change the C# compiler (csc) used in your Unity project.
    • Change the nuget package name.
    • Change the nuget package version.
      • 3.4.0: C# 8.0 Supported.
      • 3.5.0: C# 8.0 Supported. (default in Unity 2020.2.0)
      • 3.6.0: C# 8.0 Supported.
      • 3.7.0: C# 8.0 Supported.
      • 3.8.0 (preview): C# 9.0 Supported.
      • For other versions, see the nuget package page above.
    • Change the C# language version.
      • 7.0
      • 7.1
      • 7.2
      • 7.3
      • 8.0 (latest, default)
      • 9.0 (preview)
  • Add scripting symbols.
    • e.g. CSHARP_7_3_OR_LATER, CSHARP_8_OR_LATER, CSHARP_9_OR_LATER
  • Modify langversion property in *.csproj file
  • dotnet is not required.
  • Use Default Compiler option to disable this plugin.

Feature plans

  • Add a dropdown menu to select version
  • Verify the selected pakcage name and version
  • Show package description

NOTE: Please do so at your own risk!

https://forum.unity.com/threads/unity-c-8-support.663757/page-2#post-5738029

Unity doesn't support using your own C# compiler. While this is possible, it is not something I would recommend, as we've not tested customer C# compiler versions with Unity.





Installation

Requirement

  • Unity 2018.3 or later
  • .Net Framework 4.x

via OpenUPM

This package is available on OpenUPM.
After installing openupm-cli, run the following command

openupm add com.coffee.csharp-compiler-settings

via Package Manager

Find the manifest.json file in the Packages directory in your project and edit it to look like this:

{
  "dependencies": {
    "com.coffee.csharp-compiler-settings": "https://github.com/mob-sakai/CSharpCompilerSettingsForUnity.git",
    ...
  },
}

To update the package, change suffix #{version} to the target version.

  • e.g. "com.coffee.csharp-compiler-settings": "https://github.com/mob-sakai/CSharpCompilerSettingsForUnity.git#1.0.0",

Or, use UpmGitExtension to install and update the package.





Usage

  1. Open project setting window. (Edit > Project Settings)
  2. Select C# Compiler tab and turn off Use Default Compiler option.
  3. It will automatically request a recompilation.
    The selected nuget package will be used for compilation.
  4. Enjoy!

Settings asset

A project setting asset for C# Compiler will be saved in ProjectSettings/CSharpCompilerSettings.asset.

{
    "m_UseDefaultCompiler": false,
    "m_PackageName": "Microsoft.Net.Compilers",
    "m_PackageVersion": "3.5.0",
    "m_LanguageVersion": 2147483647
}

For C# 8.0 features

C# 8.0 features
sample

If you want to use the C# 8.0 features, set it up as follows:

  • Package Name: Microsoft.Net.Compilers
  • Package Version: 3.5.0 or later
  • Language Version: latest or CSharp_8

Some features required external library.

  • Async stream -> UniTask v2
    • Install to project.
  • Indices and ranges -> IndexRange
    • Download nuget package and extract it.
    • Import lib/netstandard2.0/IndexRange.dll to project.
  • Stackalloc in nested expressions -> System.Memory
    • Download nuget package and extract it.
    • Import lib/netstandard2.0/System.Memory.dll to project.

NOTE: Default interface methods feature is not available. It requires .Net Standard 2.1.

For C# 9.0 features (preview)

C# 9.0 features
sample

If you want to use the C# 9.0 features, set it up as follows:

  • Package Name: Microsoft.Net.Compilers
  • Package Version: 3.8.0-2.final or later
  • Language Version: preview

NOTE: Some features is not available. It requires .Net 5.





Contributing

Issues

Issues are very valuable to this project.

  • Ideas are a valuable source of contributions others can make
  • Problems show where this project is lacking
  • With a question you show where contributors can improve the user experience

Pull Requests

Pull requests are, a great way to get your ideas into this repository.
See CONTRIBUTING.md.

Support

This is an open source project that I am developing in my spare time.
If you like it, please support me.
With your support, I can spend more time on development. :)






License

  • MIT

Author

mob-sakai

See Also

About

Change the C# compiler (csc) used on your Unity project, as you like!

Resources

License

Stars

Watchers

Forks

Packages

No packages published