Change the C# compiler (csc) used in your Unity project, as you like!
<< Description | Installation | Usage | Contributing >>
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!
- 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.
- Microsoft.Net.Compilers: Official compiler (default)
- OpenSesame.Net.Compilers: Allows access to internals/privates in other assemblies.
- Or, your custom nuget package
- 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)
- Change the nuget package name.
- Add scripting symbols.
- e.g.
CSHARP_7_3_OR_LATER
,CSHARP_8_OR_LATER
,CSHARP_9_OR_LATER
- e.g.
- Modify
langversion
property in *.csproj file dotnet
is not required.Use Default Compiler
option to disable this plugin.
- Add a dropdown menu to select version
- Verify the selected pakcage name and version
- Show package description
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.
- Unity 2018.3 or later
.Net Framework 4.x
This package is available on OpenUPM.
After installing openupm-cli, run the following command
openupm add com.coffee.csharp-compiler-settings
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.
- Open project setting window. (
Edit > Project Settings
)
- Select
C# Compiler
tab and turn offUse Default Compiler
option.
- It will automatically request a recompilation.
The selected nuget package will be used for compilation. - Enjoy!
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
}
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
.
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
.
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 are, a great way to get your ideas into this repository.
See CONTRIBUTING.md.
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. :)
- MIT
- GitHub page : https://github.com/mob-sakai/CSharpCompilerSettingsForUnity
- Releases : https://github.com/mob-sakai/CSharpCompilerSettingsForUnity/releases
- Issue tracker : https://github.com/mob-sakai/CSharpCompilerSettingsForUnity/issues
- Change log : https://github.com/mob-sakai/CSharpCompilerSettingsForUnity/blob/upm/CHANGELOG.md