|
2 | 2 | using System.IO;
|
3 | 3 | using System.Linq;
|
4 | 4 | using System.Text;
|
| 5 | +using System.Text.RegularExpressions; |
5 | 6 | using UnityEditor;
|
6 | 7 | using UnityEngine;
|
7 | 8 | using LVersion = Coffee.CSharpCompilerSettings.CSharpLanguageVersion;
|
@@ -119,9 +120,9 @@ internal class CscSettingsAsset : ScriptableObject, ISerializationCallbackReceiv
|
119 | 120 |
|
120 | 121 | private static CscSettingsAsset CreateFromProjectSettings()
|
121 | 122 | {
|
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>(); |
125 | 126 | s_Instance.IsProjectSetting = true;
|
126 | 127 | return s_Instance;
|
127 | 128 | }
|
@@ -225,6 +226,27 @@ public static CscSettingsAsset CreateFromJson(string json = "")
|
225 | 226 | {
|
226 | 227 | var setting = CreateInstance<CscSettingsAsset>();
|
227 | 228 | 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 | + |
228 | 250 | return setting;
|
229 | 251 | }
|
230 | 252 |
|
|
0 commit comments