|
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