Skip to content

Commit 1858247

Browse files
committed
fix: in Unity 2020.2 or later, some fields in CscSettingsAsset will be not deserialized on first compilation
1 parent acfa0e6 commit 1858247

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

Plugins/CSharpCompilerSettings/CscSettingsAsset.cs

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.IO;
33
using System.Linq;
44
using System.Text;
5+
using System.Text.RegularExpressions;
56
using UnityEditor;
67
using UnityEngine;
78
using LVersion = Coffee.CSharpCompilerSettings.CSharpLanguageVersion;
@@ -119,9 +120,9 @@ internal class CscSettingsAsset : ScriptableObject, ISerializationCallbackReceiv
119120

120121
private static CscSettingsAsset CreateFromProjectSettings()
121122
{
122-
s_Instance = CreateInstance<CscSettingsAsset>();
123-
if (File.Exists(k_SettingsPath))
124-
JsonUtility.FromJsonOverwrite(File.ReadAllText(k_SettingsPath), s_Instance);
123+
s_Instance = File.Exists(k_SettingsPath)
124+
? CreateFromJson(File.ReadAllText(k_SettingsPath))
125+
: CreateInstance<CscSettingsAsset>();
125126
s_Instance.IsProjectSetting = true;
126127
return s_Instance;
127128
}
@@ -225,6 +226,27 @@ public static CscSettingsAsset CreateFromJson(string json = "")
225226
{
226227
var setting = CreateInstance<CscSettingsAsset>();
227228
JsonUtility.FromJsonOverwrite(json, setting);
229+
230+
// In Unity 2020.2 or later, some fields will be not deserialized on first compilation.
231+
var serializedJson = JsonUtility.ToJson(setting);
232+
if (!serializedJson.Contains("\"m_CompilerPackage\":"))
233+
{
234+
var m = Regex.Match(json, "\"m_CompilerPackage\":\\s*({[^}]+})");
235+
if (m.Success)
236+
{
237+
setting.m_CompilerPackage = JsonUtility.FromJson<NugetPackage>(m.Groups[1].Value);
238+
}
239+
}
240+
241+
if (!serializedJson.Contains("\"m_CompilerFilter\":"))
242+
{
243+
var m = Regex.Match(json, "\"m_CompilerFilter\":\\s*({[^}]+})");
244+
if (m.Success)
245+
{
246+
setting.m_CompilerFilter = JsonUtility.FromJson<AssemblyFilter>(m.Groups[1].Value);
247+
}
248+
}
249+
228250
return setting;
229251
}
230252

0 commit comments

Comments
 (0)