|
@@ -26,6 +26,8 @@ namespace GodotTools
|
|
|
private MonoDevelopInstance monoDevelopInstance;
|
|
|
private MonoDevelopInstance visualStudioForMacInstance;
|
|
|
|
|
|
+ private WeakReference<GodotSharpExport> exportPluginWeak;
|
|
|
+
|
|
|
public MonoBottomPanel MonoBottomPanel { get; private set; }
|
|
|
|
|
|
private bool CreateProjectSolution()
|
|
@@ -513,11 +515,27 @@ namespace GodotTools
|
|
|
});
|
|
|
|
|
|
// Export plugin
|
|
|
- AddExportPlugin(new GodotSharpExport());
|
|
|
+ var exportPlugin = new GodotSharpExport();
|
|
|
+ AddExportPlugin(exportPlugin);
|
|
|
+ exportPluginWeak = new WeakReference<GodotSharpExport>(exportPlugin);
|
|
|
|
|
|
GodotSharpBuilds.Initialize();
|
|
|
}
|
|
|
|
|
|
+ protected override void Dispose(bool disposing)
|
|
|
+ {
|
|
|
+ base.Dispose(disposing);
|
|
|
+
|
|
|
+ if (exportPluginWeak.TryGetTarget(out var exportPlugin))
|
|
|
+ {
|
|
|
+ // We need to dispose our export plugin before the editor destroys EditorSettings.
|
|
|
+ // Otherwise, if the GC disposes it at a later time, EditorExportPlatformAndroid
|
|
|
+ // will be freed after EditorSettings already was, and its device polling thread
|
|
|
+ // will try to access the EditorSettings singleton, resulting in null dereferencing.
|
|
|
+ exportPlugin.Dispose();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public void OnBeforeSerialize()
|
|
|
{
|
|
|
}
|