diff --git a/src/Core/CSharp/ScriptInteraction.cs b/src/Core/CSharp/ScriptInteraction.cs index 541da4d4..034b3c98 100644 --- a/src/Core/CSharp/ScriptInteraction.cs +++ b/src/Core/CSharp/ScriptInteraction.cs @@ -7,6 +7,7 @@ using UnityExplorer.Core.Runtime; using UnityExplorer.UI.Main.CSConsole; using UnityExplorer.UI.Main.Home; +using UnityExplorer.UI.Inspectors; namespace UnityExplorer.Core.CSharp { diff --git a/src/Core/ReflectionUtility.cs b/src/Core/ReflectionUtility.cs index 06a534ae..916d5364 100644 --- a/src/Core/ReflectionUtility.cs +++ b/src/Core/ReflectionUtility.cs @@ -7,7 +7,7 @@ using BF = System.Reflection.BindingFlags; using UnityExplorer.Core.Runtime; -namespace UnityExplorer.Core +namespace UnityExplorer { public static class ReflectionUtility { @@ -18,7 +18,7 @@ public static class ReflectionUtility /// /// The object to get the true Type for. /// The most accurate Type of the object which could be identified. - public static Type GetType(this object obj) + public static Type GetActualType(this object obj) { if (obj == null) return null; @@ -32,7 +32,7 @@ public static Type GetType(this object obj) /// The object to cast /// The object, cast to the underlying Type if possible, otherwise the original object. public static object Cast(this object obj) - => ReflectionProvider.Instance.Cast(obj, GetType(obj)); + => ReflectionProvider.Instance.Cast(obj, GetActualType(obj)); /// /// Cast an object to a Type, if possible. @@ -105,7 +105,7 @@ from type in asm.TryGetTypes() /// /// Get all base types of the provided Type, including itself. /// - public static Type[] GetAllBaseTypes(this object obj) => GetAllBaseTypes(GetType(obj)); + public static Type[] GetAllBaseTypes(this object obj) => GetAllBaseTypes(GetActualType(obj)); /// /// Get all base types of the provided Type, including itself. diff --git a/src/Core/Runtime/Il2Cpp/Il2CppReflection.cs b/src/Core/Runtime/Il2Cpp/Il2CppReflection.cs index dd7143fd..1816c17e 100644 --- a/src/Core/Runtime/Il2Cpp/Il2CppReflection.cs +++ b/src/Core/Runtime/Il2Cpp/Il2CppReflection.cs @@ -163,7 +163,7 @@ public static object Il2CppCast(object obj, Type castTo) IntPtr castFromPtr = il2cpp_object_get_class(ilObj.Pointer); if (!il2cpp_class_is_assignable_from(castToPtr, castFromPtr)) - return obj; + return null; if (RuntimeSpecificsStore.IsInjected(castToPtr)) return UnhollowerBaseLib.Runtime.ClassInjectorBase.GetMonoObjectFromIl2CppPointer(ilObj.Pointer); diff --git a/src/Core/TestClass.cs b/src/Core/TestClass.cs new file mode 100644 index 00000000..eebe35ad --- /dev/null +++ b/src/Core/TestClass.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UnityExplorer +{ +#if CPP + public static class TestClass + { + public static Il2CppSystem.Collections.Hashtable testHashset; + + static TestClass() + { + testHashset = new Il2CppSystem.Collections.Hashtable(); + testHashset.Add("key1", "itemOne"); + testHashset.Add("key2", "itemTwo"); + testHashset.Add("key3", "itemThree"); + } + } +#endif +} diff --git a/src/ExplorerCore.cs b/src/ExplorerCore.cs index 76e4d192..cf658940 100644 --- a/src/ExplorerCore.cs +++ b/src/ExplorerCore.cs @@ -12,7 +12,7 @@ namespace UnityExplorer public class ExplorerCore { public const string NAME = "UnityExplorer"; - public const string VERSION = "3.3.4"; + public const string VERSION = "3.3.5"; public const string AUTHOR = "Sinai"; public const string GUID = "com.sinai.unityexplorer"; @@ -46,6 +46,8 @@ public static void Init(IExplorerLoader loader) UIManager.Init(); Log($"{NAME} {VERSION} initialized."); + + // InspectorManager.Instance.Inspect(typeof(TestClass)); } public static void Update() diff --git a/src/Loader/ML/MelonLoaderConfigHandler.cs b/src/Loader/ML/MelonLoaderConfigHandler.cs index 5dcc6541..d900fedd 100644 --- a/src/Loader/ML/MelonLoaderConfigHandler.cs +++ b/src/Loader/ML/MelonLoaderConfigHandler.cs @@ -21,7 +21,11 @@ public override void Init() { prefCategory = MelonPreferences.CreateCategory(CTG_NAME, $"{CTG_NAME} Settings"); - MelonPreferences.Mapper.RegisterMapper(KeycodeReader, KeycodeWriter); + try + { + MelonPreferences.Mapper.RegisterMapper(KeycodeReader, KeycodeWriter); + } + catch { } } public override void LoadConfig() diff --git a/src/UI/CacheObject/CacheMember.cs b/src/UI/CacheObject/CacheMember.cs index b7e28237..a2eaa754 100644 --- a/src/UI/CacheObject/CacheMember.cs +++ b/src/UI/CacheObject/CacheMember.cs @@ -10,7 +10,7 @@ using UnityExplorer.Core; using UnityExplorer.UI.Utility; using UnityExplorer.UI.InteractiveValues; -using UnityExplorer.UI.Main.Home.Inspectors.Reflection; +using UnityExplorer.UI.Inspectors.Reflection; namespace UnityExplorer.UI.CacheObject { @@ -86,7 +86,7 @@ public override void UpdateValue() { try { - Type baseType = ReflectionUtility.GetType(IValue.Value) ?? FallbackType; + Type baseType = ReflectionUtility.GetActualType(IValue.Value) ?? FallbackType; if (!ReflectionProvider.Instance.IsReflectionSupported(baseType)) throw new Exception("Type not supported with reflection"); @@ -94,7 +94,7 @@ public override void UpdateValue() UpdateReflection(); if (IValue.Value != null) - IValue.Value = IValue.Value.Cast(ReflectionUtility.GetType(IValue.Value)); + IValue.Value = IValue.Value.Cast(ReflectionUtility.GetActualType(IValue.Value)); } catch (Exception e) { diff --git a/src/UI/CacheObject/CacheObjectBase.cs b/src/UI/CacheObject/CacheObjectBase.cs index 82db4a6c..b9516c7f 100644 --- a/src/UI/CacheObject/CacheObjectBase.cs +++ b/src/UI/CacheObject/CacheObjectBase.cs @@ -55,7 +55,7 @@ public virtual void UpdateValue() // if the type has changed fundamentally, make a new interactivevalue for it var type = value == null ? FallbackType - : ReflectionUtility.GetType(value); + : ReflectionUtility.GetActualType(value); var ivalueType = InteractiveValue.GetIValueForType(type); diff --git a/src/UI/Main/Home/Inspectors/GameObjects/ChildList.cs b/src/UI/Inspectors/GameObjects/ChildList.cs similarity index 99% rename from src/UI/Main/Home/Inspectors/GameObjects/ChildList.cs rename to src/UI/Inspectors/GameObjects/ChildList.cs index 28c60bb2..6372674a 100644 --- a/src/UI/Main/Home/Inspectors/GameObjects/ChildList.cs +++ b/src/UI/Inspectors/GameObjects/ChildList.cs @@ -7,7 +7,7 @@ using UnityExplorer.Core.Runtime; using UnityExplorer.UI.Utility; -namespace UnityExplorer.UI.Main.Home.Inspectors.GameObjects +namespace UnityExplorer.UI.Inspectors.GameObjects { public class ChildList { diff --git a/src/UI/Main/Home/Inspectors/GameObjects/ComponentList.cs b/src/UI/Inspectors/GameObjects/ComponentList.cs similarity index 98% rename from src/UI/Main/Home/Inspectors/GameObjects/ComponentList.cs rename to src/UI/Inspectors/GameObjects/ComponentList.cs index 51610a61..1b9e8342 100644 --- a/src/UI/Main/Home/Inspectors/GameObjects/ComponentList.cs +++ b/src/UI/Inspectors/GameObjects/ComponentList.cs @@ -8,7 +8,7 @@ using UnityExplorer.Core.Runtime; using UnityExplorer.UI.Utility; -namespace UnityExplorer.UI.Main.Home.Inspectors.GameObjects +namespace UnityExplorer.UI.Inspectors.GameObjects { public class ComponentList { @@ -75,7 +75,7 @@ internal void RefreshComponentList() var text = s_compListTexts[i]; - text.text = SignatureHighlighter.ParseFullSyntax(ReflectionUtility.GetType(comp), true); + text.text = SignatureHighlighter.ParseFullSyntax(ReflectionUtility.GetActualType(comp), true); var toggle = s_compToggles[i]; #if CPP diff --git a/src/UI/Main/Home/Inspectors/GameObjects/GameObjectControls.cs b/src/UI/Inspectors/GameObjects/GameObjectControls.cs similarity index 99% rename from src/UI/Main/Home/Inspectors/GameObjects/GameObjectControls.cs rename to src/UI/Inspectors/GameObjects/GameObjectControls.cs index f8140fba..6dcc577a 100644 --- a/src/UI/Main/Home/Inspectors/GameObjects/GameObjectControls.cs +++ b/src/UI/Inspectors/GameObjects/GameObjectControls.cs @@ -8,7 +8,7 @@ using UnityExplorer.Core.Runtime; using UnityExplorer.Core.Unity; -namespace UnityExplorer.UI.Main.Home.Inspectors.GameObjects +namespace UnityExplorer.UI.Inspectors.GameObjects { public class GameObjectControls { diff --git a/src/UI/Main/Home/Inspectors/GameObjects/GameObjectInspector.cs b/src/UI/Inspectors/GameObjects/GameObjectInspector.cs similarity index 99% rename from src/UI/Main/Home/Inspectors/GameObjects/GameObjectInspector.cs rename to src/UI/Inspectors/GameObjects/GameObjectInspector.cs index d6f54fe9..df01178a 100644 --- a/src/UI/Main/Home/Inspectors/GameObjects/GameObjectInspector.cs +++ b/src/UI/Inspectors/GameObjects/GameObjectInspector.cs @@ -7,7 +7,7 @@ using UnityExplorer.Core.Runtime; using UnityExplorer.Core.Unity; -namespace UnityExplorer.UI.Main.Home.Inspectors.GameObjects +namespace UnityExplorer.UI.Inspectors.GameObjects { public class GameObjectInspector : InspectorBase { diff --git a/src/UI/Main/Home/InspectUnderMouse.cs b/src/UI/Inspectors/InspectUnderMouse.cs similarity index 99% rename from src/UI/Main/Home/InspectUnderMouse.cs rename to src/UI/Inspectors/InspectUnderMouse.cs index 8aa41101..feb4528a 100644 --- a/src/UI/Main/Home/InspectUnderMouse.cs +++ b/src/UI/Inspectors/InspectUnderMouse.cs @@ -11,6 +11,7 @@ using UnityExplorer.Core.Runtime; using UnityExplorer.UI; using UnityExplorer.UI.Main; +using UnityExplorer.UI.Inspectors; namespace UnityExplorer.UI.Main.Home { diff --git a/src/UI/Main/Home/Inspectors/InspectorBase.cs b/src/UI/Inspectors/InspectorBase.cs similarity index 98% rename from src/UI/Main/Home/Inspectors/InspectorBase.cs rename to src/UI/Inspectors/InspectorBase.cs index eb295f4e..2e167c07 100644 --- a/src/UI/Main/Home/Inspectors/InspectorBase.cs +++ b/src/UI/Inspectors/InspectorBase.cs @@ -3,7 +3,7 @@ using UnityEngine.UI; using UnityExplorer.Core.Unity; -namespace UnityExplorer.UI.Main.Home.Inspectors +namespace UnityExplorer.UI.Inspectors { public abstract class InspectorBase { diff --git a/src/UI/Main/Home/InspectorManager.cs b/src/UI/Inspectors/InspectorManager.cs similarity index 97% rename from src/UI/Main/Home/InspectorManager.cs rename to src/UI/Inspectors/InspectorManager.cs index 15801d1b..4c85427b 100644 --- a/src/UI/Main/Home/InspectorManager.cs +++ b/src/UI/Inspectors/InspectorManager.cs @@ -9,12 +9,11 @@ using UnityEngine.UI; using UnityExplorer.Core.Runtime; using UnityExplorer.UI.Main.Home; -using UnityExplorer.UI.Main.Home.Inspectors; using UnityExplorer.UI.CacheObject; -using UnityExplorer.UI.Main.Home.Inspectors.GameObjects; -using UnityExplorer.UI.Main.Home.Inspectors.Reflection; +using UnityExplorer.UI.Inspectors.GameObjects; +using UnityExplorer.UI.Inspectors.Reflection; -namespace UnityExplorer.UI.Main.Home +namespace UnityExplorer.UI.Inspectors { public class InspectorManager { diff --git a/src/UI/Main/Home/Inspectors/Reflection/InstanceInspector.cs b/src/UI/Inspectors/Reflection/InstanceInspector.cs similarity index 99% rename from src/UI/Main/Home/Inspectors/Reflection/InstanceInspector.cs rename to src/UI/Inspectors/Reflection/InstanceInspector.cs index a0e95d6f..d2de92e8 100644 --- a/src/UI/Main/Home/Inspectors/Reflection/InstanceInspector.cs +++ b/src/UI/Inspectors/Reflection/InstanceInspector.cs @@ -9,7 +9,7 @@ using UnityExplorer.Core.Config; using UnityExplorer.Core.Runtime; -namespace UnityExplorer.UI.Main.Home.Inspectors.Reflection +namespace UnityExplorer.UI.Inspectors.Reflection { public enum MemberScopes { diff --git a/src/UI/Main/Home/Inspectors/Reflection/ReflectionInspector.cs b/src/UI/Inspectors/Reflection/ReflectionInspector.cs similarity index 99% rename from src/UI/Main/Home/Inspectors/Reflection/ReflectionInspector.cs rename to src/UI/Inspectors/Reflection/ReflectionInspector.cs index d2326a7e..a48e58b9 100644 --- a/src/UI/Main/Home/Inspectors/Reflection/ReflectionInspector.cs +++ b/src/UI/Inspectors/Reflection/ReflectionInspector.cs @@ -9,9 +9,11 @@ using UnityExplorer.Core.Config; using UnityExplorer.Core.Runtime; using UnityExplorer.UI.CacheObject; +using UnityExplorer.UI.Main; +using UnityExplorer.UI.Main.Home; using UnityExplorer.UI.Utility; -namespace UnityExplorer.UI.Main.Home.Inspectors.Reflection +namespace UnityExplorer.UI.Inspectors.Reflection { public class ReflectionInspector : InspectorBase { @@ -78,7 +80,7 @@ public ReflectionInspector(object target) : base(target) if (this is StaticInspector) m_targetType = target as Type; else - m_targetType = ReflectionUtility.GetType(target); + m_targetType = ReflectionUtility.GetActualType(target); m_targetTypeShortName = SignatureHighlighter.ParseFullSyntax(m_targetType, false); diff --git a/src/UI/Main/Home/Inspectors/Reflection/StaticInspector.cs b/src/UI/Inspectors/Reflection/StaticInspector.cs similarity index 83% rename from src/UI/Main/Home/Inspectors/Reflection/StaticInspector.cs rename to src/UI/Inspectors/Reflection/StaticInspector.cs index 694c1b09..eeeb5377 100644 --- a/src/UI/Main/Home/Inspectors/Reflection/StaticInspector.cs +++ b/src/UI/Inspectors/Reflection/StaticInspector.cs @@ -3,7 +3,7 @@ using System.Linq; using System.Text; -namespace UnityExplorer.UI.Main.Home.Inspectors.Reflection +namespace UnityExplorer.UI.Inspectors.Reflection { public class StaticInspector : ReflectionInspector { diff --git a/src/UI/InteractiveValues/InteractiveDictionary.cs b/src/UI/InteractiveValues/InteractiveDictionary.cs index a9ffa66c..10de4893 100644 --- a/src/UI/InteractiveValues/InteractiveDictionary.cs +++ b/src/UI/InteractiveValues/InteractiveDictionary.cs @@ -218,32 +218,37 @@ internal override void OnToggleSubcontent(bool active) private IDictionary EnumerateWithReflection() { - var valueType = ReflectionUtility.GetType(Value); + var valueType = ReflectionUtility.GetActualType(Value); - // get keys and values - var keys = valueType.GetProperty("Keys").GetValue(Value, null); - var values = valueType.GetProperty("Values").GetValue(Value, null); - - // create lists to hold them var keyList = new List(); var valueList = new List(); - // store entries with reflection - EnumerateCollection(keys, keyList); - EnumerateCollection(values, valueList); + var hashtable = Value.Cast(typeof(Il2CppSystem.Collections.Hashtable)) as Il2CppSystem.Collections.Hashtable; + + if (hashtable != null) + { + EnumerateCppHashtable(hashtable, keyList, valueList); + } + else + { + var keys = valueType.GetProperty("Keys").GetValue(Value, null); + var values = valueType.GetProperty("Values").GetValue(Value, null); + + EnumerateCppIDictionary(keys, keyList); + EnumerateCppIDictionary(values, valueList); + } - // make actual mono dictionary - var dict = (IDictionary)Activator.CreateInstance(typeof(Dictionary<,>) - .MakeGenericType(m_typeOfKeys, m_typeofValues)); + var dict = Activator.CreateInstance(typeof(Dictionary<,>) + .MakeGenericType(m_typeOfKeys, m_typeofValues)) + as IDictionary; - // finally iterate into mono dictionary for (int i = 0; i < keyList.Count; i++) dict.Add(keyList[i], valueList[i]); return dict; } - private void EnumerateCollection(object collection, List list) + private void EnumerateCppIDictionary(object collection, List list) { // invoke GetEnumerator var enumerator = collection.GetType().GetMethod("GetEnumerator").Invoke(collection, null); @@ -258,11 +263,23 @@ private void EnumerateCollection(object collection, List list) list.Add(current.GetValue(enumerator, null)); } } + + private void EnumerateCppHashtable(Il2CppSystem.Collections.Hashtable hashtable, List keys, List values) + { + for (int i = 0; i < hashtable.buckets.Count; i++) + { + var bucket = hashtable.buckets[i]; + if (bucket == null || bucket.key == null) + continue; + keys.Add(bucket.key); + values.Add(bucket.val); + } + } #endif -#endregion + #endregion -#region UI CONSTRUCTION + #region UI CONSTRUCTION internal GameObject m_listContent; internal LayoutElement m_listLayout; diff --git a/src/UI/InteractiveValues/InteractiveEnumerable.cs b/src/UI/InteractiveValues/InteractiveEnumerable.cs index b6f2840d..9bf6f5bd 100644 --- a/src/UI/InteractiveValues/InteractiveEnumerable.cs +++ b/src/UI/InteractiveValues/InteractiveEnumerable.cs @@ -6,6 +6,7 @@ using System.Text; using UnityEngine; using UnityEngine.UI; +using UnityExplorer.Core; using UnityExplorer.Core.Config; using UnityExplorer.Core.Unity; using UnityExplorer.UI; @@ -38,11 +39,11 @@ public override bool SubContentWanted internal IEnumerable RefIEnumerable; internal IList RefIList; -#if CPP - internal Il2CppSystem.Collections.ICollection CppICollection; -#else - internal ICollection CppICollection = null; -#endif +//#if CPP +// internal object CppICollection; +//#else +// internal object CppICollection = null; +//#endif internal readonly Type m_baseEntryType; @@ -55,13 +56,17 @@ public override void OnValueUpdated() RefIEnumerable = Value as IEnumerable; RefIList = Value as IList; -#if CPP - if (Value != null && RefIList == null) - { - try { CppICollection = (Value as Il2CppSystem.Object).TryCast(); } - catch { } - } -#endif +//#if CPP +// if (Value != null && RefIList == null) +// { +// try +// { +// var type = typeof(Il2CppSystem.Collections.ICollection).MakeGenericType(this.m_baseEntryType); +// CppICollection = (Value as Il2CppSystem.Object).Cast(type); +// } +// catch { } +// } +//#endif if (m_subContentParent.activeSelf) { @@ -91,8 +96,8 @@ public override void RefreshUIForValue() if (Value != null) { string count = "?"; - if (m_recacheWanted && (RefIList != null || CppICollection != null)) - count = RefIList?.Count.ToString() ?? CppICollection.Count.ToString(); + if (m_recacheWanted && RefIList != null)// || CppICollection != null)) + count = RefIList.Count.ToString();// ?? CppICollection.Count.ToString(); else if (!m_recacheWanted) count = m_entries.Count.ToString(); diff --git a/src/UI/InteractiveValues/InteractiveString.cs b/src/UI/InteractiveValues/InteractiveString.cs index 1da24670..d453c368 100644 --- a/src/UI/InteractiveValues/InteractiveString.cs +++ b/src/UI/InteractiveValues/InteractiveString.cs @@ -23,6 +23,14 @@ public InteractiveString(object value, Type valueType) : base(value, valueType) public override void OnValueUpdated() { +#if CPP + // strings boxed as Il2CppSystem.Objects can behave weirdly. + // GetActualType will find they are a string, but if its boxed + // then we need to unbox it like this... + if (!(Value is string)) + Value = ((Il2CppSystem.Object)Value).ToString(); +#endif + base.OnValueUpdated(); } diff --git a/src/UI/InteractiveValues/InteractiveValue.cs b/src/UI/InteractiveValues/InteractiveValue.cs index 3bfa43ce..a54fb70b 100644 --- a/src/UI/InteractiveValues/InteractiveValue.cs +++ b/src/UI/InteractiveValues/InteractiveValue.cs @@ -12,6 +12,7 @@ using UnityExplorer.UI.Utility; using UnityExplorer.UI.CacheObject; using UnityExplorer.UI.Main.Home; +using UnityExplorer.UI.Inspectors; namespace UnityExplorer.UI.InteractiveValues { @@ -66,7 +67,7 @@ public static Type GetIValueForType(Type type) public static InteractiveValue Create(object value, Type fallbackType) { - var type = ReflectionUtility.GetType(value) ?? fallbackType; + var type = ReflectionUtility.GetActualType(value) ?? fallbackType; var iType = GetIValueForType(type); return (InteractiveValue)Activator.CreateInstance(iType, new object[] { value, type }); diff --git a/src/UI/Main/DebugConsole.cs b/src/UI/Main/DebugConsole.cs index f305ea15..3b0c92da 100644 --- a/src/UI/Main/DebugConsole.cs +++ b/src/UI/Main/DebugConsole.cs @@ -217,7 +217,6 @@ public void ConstructUI(GameObject parent) { LogUnity = val; ConfigManager.Log_Unity_Debug.Value = val; - ConfigManager.Handler.SaveConfig(); }); ConfigManager.Log_Unity_Debug.OnValueChanged += (bool val) => { unityToggle.isOn = val; }; diff --git a/src/UI/Main/Home/HomePage.cs b/src/UI/Main/Home/HomePage.cs index d89522ab..cfcfe6dd 100644 --- a/src/UI/Main/Home/HomePage.cs +++ b/src/UI/Main/Home/HomePage.cs @@ -3,6 +3,7 @@ using System.Linq; using UnityEngine; using UnityEngine.UI; +using UnityExplorer.UI.Inspectors; namespace UnityExplorer.UI.Main.Home { diff --git a/src/UI/Main/Home/SceneExplorer.cs b/src/UI/Main/Home/SceneExplorer.cs index d29119c8..3e97d208 100644 --- a/src/UI/Main/Home/SceneExplorer.cs +++ b/src/UI/Main/Home/SceneExplorer.cs @@ -13,6 +13,7 @@ using UnityExplorer.UI.Main.Search; using System.IO; using UnityExplorer.Core; +using UnityExplorer.UI.Inspectors; namespace UnityExplorer.UI.Main.Home { diff --git a/src/UI/Main/Search/SearchPage.cs b/src/UI/Main/Search/SearchPage.cs index 69abf29e..e60a3fb5 100644 --- a/src/UI/Main/Search/SearchPage.cs +++ b/src/UI/Main/Search/SearchPage.cs @@ -10,6 +10,7 @@ using UnityExplorer.UI.Utility; using UnityExplorer.Core.Search; using UnityExplorer.UI.Main.Home; +using UnityExplorer.UI.Inspectors; namespace UnityExplorer.UI.Main.Search { @@ -129,7 +130,7 @@ private void RefreshResultList() if (m_context != SearchContext.StaticClass) { - var name = SignatureHighlighter.ParseFullSyntax(ReflectionUtility.GetType(obj), true); + var name = SignatureHighlighter.ParseFullSyntax(ReflectionUtility.GetActualType(obj), true); if (unityObj && m_context != SearchContext.Singleton) { diff --git a/src/UnityExplorer.csproj b/src/UnityExplorer.csproj index ce484ac3..d5168cb5 100644 --- a/src/UnityExplorer.csproj +++ b/src/UnityExplorer.csproj @@ -246,6 +246,7 @@ + @@ -286,16 +287,16 @@ - - - - - - - - - - + + + + + + + + + +