microsoft / MSBuildForUnity

MSBuild integration in Unity
MIT License
353 stars 33 forks source link

Timing issue in Unity Editor #85

Open CDiaz-MS opened 4 years ago

CDiaz-MS commented 4 years ago

Steps to reproduce:

  1. Import the latest MRTK Foundation package, 2.2
  2. Observe the error

@andreiborodin

NullReferenceException: Object reference not set to an instance of an object
UnityEngine.Experimental.UIElements.StyleSheets.StyleSelectorHelper.FastLookup (System.Collections.Generic.IDictionary`2[TKey,TValue] table, System.Collections.Generic.List`1[T] matchedSelectors, UnityEngine.Experimental.UIElements.StyleMatchingContext context, System.String input, UnityEngine.Experimental.UIElements.StyleSheets.SelectorMatchRecord& record) (at C:/buildslave/unity/build/Modules/UIElements/StyleSheets/StyleSelectorHelper.cs:193)
UnityEngine.Experimental.UIElements.StyleSheets.StyleSelectorHelper.FindMatches (UnityEngine.Experimental.UIElements.StyleMatchingContext context, System.Collections.Generic.List`1[T] matchedSelectors) (at C:/buildslave/unity/build/Modules/UIElements/StyleSheets/StyleSelectorHelper.cs:220)
UnityEngine.Experimental.UIElements.VisualTreeStyleUpdaterTraversal.TraverseRecursive (UnityEngine.Experimental.UIElements.VisualElement element, System.Int32 depth) (at C:/buildslave/unity/build/Modules/UIElements/VisualTreeStyleUpdater.cs:218)
UnityEngine.Experimental.UIElements.StyleSheets.HierarchyTraversal.Recurse (UnityEngine.Experimental.UIElements.VisualElement element, System.Int32 depth) (at C:/buildslave/unity/build/Modules/UIElements/HierarchyTraversal.cs:25)
UnityEngine.Experimental.UIElements.VisualTreeStyleUpdaterTraversal.TraverseRecursive (UnityEngine.Experimental.UIElements.VisualElement element, System.Int32 depth) (at C:/buildslave/unity/build/Modules/UIElements/VisualTreeStyleUpdater.cs:227)
UnityEngine.Experimental.UIElements.StyleSheets.HierarchyTraversal.Traverse (UnityEngine.Experimental.UIElements.VisualElement element) (at C:/buildslave/unity/build/Modules/UIElements/HierarchyTraversal.cs:12)
UnityEngine.Experimental.UIElements.VisualTreeStyleUpdater.ApplyStyles () (at C:/buildslave/unity/build/Modules/UIElements/VisualTreeStyleUpdater.cs:110)
UnityEngine.Experimental.UIElements.VisualTreeStyleUpdater.Update () (at C:/buildslave/unity/build/Modules/UIElements/VisualTreeStyleUpdater.cs:93)
UnityEngine.Experimental.UIElements.VisualTreeUpdater.UpdateVisualTree () (at C:/buildslave/unity/build/Modules/UIElements/VisualTreeUpdater.cs:70)
UnityEngine.Experimental.UIElements.Panel.Repaint (UnityEngine.Event e) (at C:/buildslave/unity/build/Modules/UIElements/Panel.cs:507)
UnityEngine.Experimental.UIElements.UIElementsUtility.DoDispatch (UnityEngine.Experimental.UIElements.BaseVisualElementPanel panel) (at C:/buildslave/unity/build/Modules/UIElements/UIElementsUtility.cs:230)
UnityEngine.Experimental.UIElements.UIElementsUtility.ProcessEvent (System.Int32 instanceID, System.IntPtr nativeEventPtr) (at C:/buildslave/unity/build/Modules/UIElements/UIElementsUtility.cs:68)
UnityEngine.GUIUtility.ProcessEvent (System.Int32 instanceID, System.IntPtr nativeEventPtr) (at C:/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:179)
UnityEditor.EditorUtility:DisplayCancelableProgressBar(String, String, Single)
Microsoft.Build.Unity.<>c__DisplayClass9_0:<BuildProjects>g__DisplayProgress|2(String, Single) (at Library/PackageCache/com.microsoft.msbuildforunity@0.8.3/Editor/ProjectBuilder/MSBuildProjectBuilder.cs:207)
Microsoft.Build.Unity.MSBuildProjectBuilder:BuildProjects(IReadOnlyCollection`1, String, String) (at Library/PackageCache/com.microsoft.msbuildforunity@0.8.3/Editor/ProjectBuilder/MSBuildProjectBuilder.cs:171)
Microsoft.Build.Unity.MSBuildProjectBuilder:BuildAllProjects(String, String) (at Library/PackageCache/com.microsoft.msbuildforunity@0.8.3/Editor/ProjectBuilder/MSBuildProjectBuilder.cs:121)
Microsoft.Build.Unity.MSBuildProjectBuilder:TryBuildAllProjects(String, String) (at Library/PackageCache/com.microsoft.msbuildforunity@0.8.3/Editor/ProjectBuilder/MSBuildProjectBuilderEditor.cs:30)
Microsoft.Build.Unity.ProjectGeneration.MSBuildTools:RefreshGeneratedOutput(Boolean) (at Library/PackageCache/com.microsoft.msbuildforunity@0.8.3/Editor/ProjectGenerator/Scripts/MSBuildTools.cs:177)
Microsoft.Build.Unity.ProjectGeneration.MSBuildTools:.cctor() (at Library/PackageCache/com.microsoft.msbuildforunity@0.8.3/Editor/ProjectGenerator/Scripts/MSBuildTools.cs:155)
UnityEditor.EditorAssemblies:ProcessInitializeOnLoadAttributes()
andreiborodin commented 4 years ago

This issue is primarily due to MSBuildTools class (part of project generation) immediately kicking off generation on [InitializeOnLoad], which kicks of Build and DisplayCancelableProgressBar. The problem, however, Unity editor apparently didn't get a chance to recover from reload and doesn't have some of it's items initialized.