diff --git a/src/CSConsole/ConsoleController.cs b/src/CSConsole/ConsoleController.cs index 39446b5..ce93082 100644 --- a/src/CSConsole/ConsoleController.cs +++ b/src/CSConsole/ConsoleController.cs @@ -56,6 +56,7 @@ namespace UnityExplorer.CSConsole "System.Text", "System.Collections", "System.Collections.Generic", + "System.Reflection", "UnityEngine", "UniverseLib", #if CPP diff --git a/src/CSConsole/ScriptEvaluator.cs b/src/CSConsole/ScriptEvaluator.cs index 7680542..b50e156 100644 --- a/src/CSConsole/ScriptEvaluator.cs +++ b/src/CSConsole/ScriptEvaluator.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Reflection; +using UnityExplorer.Config; // Thanks to ManlyMarco for this @@ -10,6 +11,9 @@ namespace UnityExplorer.CSConsole { public class ScriptEvaluator : Evaluator, IDisposable { + internal TextWriter _textWriter; + internal static StreamReportPrinter _reportPrinter; + private static readonly HashSet StdLib = new(StringComparer.InvariantCultureIgnoreCase) { "mscorlib", @@ -18,9 +22,6 @@ namespace UnityExplorer.CSConsole "System.Xml" }; - internal TextWriter _textWriter; - internal static StreamReportPrinter _reportPrinter; - public ScriptEvaluator(TextWriter tw) : base(BuildContext(tw)) { _textWriter = tw; @@ -48,8 +49,19 @@ namespace UnityExplorer.CSConsole private void Reference(Assembly asm) { string name = asm.GetName().Name; - if (name == "completions") + + if (name == "completions") // ignore assemblies generated by mcs' autocomplete. return; + + foreach (string blacklisted in ConfigManager.CSConsole_Assembly_Blacklist.Value.Split(';')) + { + string bl = blacklisted; + if (bl.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)) + bl = blacklisted.Substring(0, bl.Length - 4); + if (string.Equals(bl, name, StringComparison.OrdinalIgnoreCase)) + return; + } + ReferenceAssembly(asm); } diff --git a/src/Config/ConfigManager.cs b/src/Config/ConfigManager.cs index 479286c..1ce6e82 100644 --- a/src/Config/ConfigManager.cs +++ b/src/Config/ConfigManager.cs @@ -25,10 +25,11 @@ namespace UnityExplorer.Config public static ConfigElement Default_Output_Path; public static ConfigElement DnSpy_Path; public static ConfigElement Log_Unity_Debug; - public static ConfigElement Reflection_Signature_Blacklist; public static ConfigElement Main_Navbar_Anchor; public static ConfigElement World_MouseInspect_Keybind; public static ConfigElement UI_MouseInspect_Keybind; + public static ConfigElement CSConsole_Assembly_Blacklist; + public static ConfigElement Reflection_Signature_Blacklist; // internal configs internal static InternalConfigHandler InternalHandler { get; private set; } @@ -57,8 +58,6 @@ namespace UnityExplorer.Config #if STANDALONE Loader.Standalone.ExplorerEditorBehaviour.Instance?.LoadConfigs(); #endif - - //InitConsoleCallback(); } internal static void RegisterConfigElement(ConfigElement configElement) @@ -77,50 +76,50 @@ namespace UnityExplorer.Config private static void CreateConfigElements() { - Master_Toggle = new ConfigElement("UnityExplorer Toggle", + Master_Toggle = new("UnityExplorer Toggle", "The key to enable or disable UnityExplorer's menu and features.", KeyCode.F7); - Hide_On_Startup = new ConfigElement("Hide On Startup", + Hide_On_Startup = new("Hide On Startup", "Should UnityExplorer be hidden on startup?", false); - Startup_Delay_Time = new ConfigElement("Startup Delay Time", + Startup_Delay_Time = new("Startup Delay Time", "The delay on startup before the UI is created.", 1f); - Target_Display = new ConfigElement("Target Display", + Target_Display = new("Target Display", "The monitor index for UnityExplorer to use, if you have multiple. 0 is the default display, 1 is secondary, etc. " + "Restart recommended when changing this setting. Make sure your extra monitors are the same resolution as your primary monitor.", 0); - Force_Unlock_Mouse = new ConfigElement("Force Unlock Mouse", + Force_Unlock_Mouse = new("Force Unlock Mouse", "Force the Cursor to be unlocked (visible) when the UnityExplorer menu is open.", true); Force_Unlock_Mouse.OnValueChanged += (bool value) => UniverseLib.Config.ConfigManager.Force_Unlock_Mouse = value; - Force_Unlock_Toggle = new ConfigElement("Force Unlock Toggle Key", + Force_Unlock_Toggle = new("Force Unlock Toggle Key", "The keybind to toggle the 'Force Unlock Mouse' setting. Only usable when UnityExplorer is open.", KeyCode.None); - Disable_EventSystem_Override = new ConfigElement("Disable EventSystem override", + Disable_EventSystem_Override = new("Disable EventSystem override", "If enabled, UnityExplorer will not override the EventSystem from the game.\nMay require restart to take effect.", false); Disable_EventSystem_Override.OnValueChanged += (bool value) => UniverseLib.Config.ConfigManager.Disable_EventSystem_Override = value; - Default_Output_Path = new ConfigElement("Default Output Path", + Default_Output_Path = new("Default Output Path", "The default output path when exporting things from UnityExplorer.", Path.Combine(ExplorerCore.ExplorerFolder, "Output")); - DnSpy_Path = new ConfigElement("dnSpy Path", + DnSpy_Path = new("dnSpy Path", "The full path to dnSpy.exe (64-bit).", @"C:/Program Files/dnspy/dnSpy.exe"); - Main_Navbar_Anchor = new ConfigElement("Main Navbar Anchor", + Main_Navbar_Anchor = new("Main Navbar Anchor", "The vertical anchor of the main UnityExplorer Navbar, in case you want to move it.", UIManager.VerticalAnchor.Top); - Log_Unity_Debug = new ConfigElement("Log Unity Debug", + Log_Unity_Debug = new("Log Unity Debug", "Should UnityEngine.Debug.Log messages be printed to UnityExplorer's log?", false); @@ -132,7 +131,13 @@ namespace UnityExplorer.Config "Optional keybind to begin a UI-mode Mouse Inspect.", KeyCode.None); - Reflection_Signature_Blacklist = new ConfigElement("Member Signature Blacklist", + CSConsole_Assembly_Blacklist = new("CSharp Console Assembly Blacklist", + "Use this to blacklist Assembly names from being referenced by the C# Console. Requires a Reset of the C# Console.\n" + + "Separate each Assembly with a semicolon ';'." + + "For example, to blacklist Assembly-CSharp, you would add 'Assembly-CSharp;'", + ""); + + Reflection_Signature_Blacklist = new("Member Signature Blacklist", "Use this to blacklist certain member signatures if they are known to cause a crash or other issues.\r\n" + "Seperate signatures with a semicolon ';'.\r\n" + "For example, to blacklist Camera.main, you would add 'UnityEngine.Camera.main;'",