增加热更代码混淆
This commit is contained in:
parent
333a146a0e
commit
8f553a5591
1
.gitignore
vendored
1
.gitignore
vendored
@ -46,6 +46,7 @@ obj/
|
|||||||
/Temp
|
/Temp
|
||||||
/Tools/MongoDB
|
/Tools/MongoDB
|
||||||
Publish/
|
Publish/
|
||||||
|
/Pack/
|
||||||
*/Temp/
|
*/Temp/
|
||||||
*/TestResults/
|
*/TestResults/
|
||||||
/.claude
|
/.claude
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
<linker>
|
<linker>
|
||||||
<assembly fullname="Animancer">
|
<assembly fullname="Animancer">
|
||||||
<type fullname="Animancer.AnimancerComponent" preserve="all" />
|
<type fullname="Animancer.AnimancerComponent" preserve="all" />
|
||||||
|
<type fullname="Animancer.AnimancerComponent/DisableAction" preserve="all" />
|
||||||
<type fullname="Animancer.AnimancerEvent" preserve="all" />
|
<type fullname="Animancer.AnimancerEvent" preserve="all" />
|
||||||
<type fullname="Animancer.AnimancerEvent/Sequence" preserve="all" />
|
<type fullname="Animancer.AnimancerEvent/Sequence" preserve="all" />
|
||||||
<type fullname="Animancer.AnimancerState" preserve="all" />
|
<type fullname="Animancer.AnimancerState" preserve="all" />
|
||||||
@ -50,6 +51,7 @@
|
|||||||
</assembly>
|
</assembly>
|
||||||
<assembly fullname="OPS.Obfuscator">
|
<assembly fullname="OPS.Obfuscator">
|
||||||
<type fullname="OPS.Obfuscator.Attribute.DoNotObfuscateClassAttribute" preserve="all" />
|
<type fullname="OPS.Obfuscator.Attribute.DoNotObfuscateClassAttribute" preserve="all" />
|
||||||
|
<type fullname="OPS.Obfuscator.Attribute.DoNotRenameAttribute" preserve="all" />
|
||||||
</assembly>
|
</assembly>
|
||||||
<assembly fullname="ParadoxNotion">
|
<assembly fullname="ParadoxNotion">
|
||||||
<type fullname="NodeCanvas.Framework.ActionTask" preserve="all" />
|
<type fullname="NodeCanvas.Framework.ActionTask" preserve="all" />
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -81,7 +81,7 @@
|
|||||||
{
|
{
|
||||||
"Type" : "Bool",
|
"Type" : "Bool",
|
||||||
"Key" : "Obfuscate_Assembly_AssemblyCSharp",
|
"Key" : "Obfuscate_Assembly_AssemblyCSharp",
|
||||||
"Value" : "True",
|
"Value" : "False",
|
||||||
"Values" : null
|
"Values" : null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -160,7 +160,7 @@
|
|||||||
{
|
{
|
||||||
"Type" : "Bool",
|
"Type" : "Bool",
|
||||||
"Key" : "Obfuscate_Namespaces",
|
"Key" : "Obfuscate_Namespaces",
|
||||||
"Value" : "True",
|
"Value" : "False",
|
||||||
"Values" : null
|
"Values" : null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -174,6 +174,9 @@
|
|||||||
"Key" : "Skip_Namespace_Array",
|
"Key" : "Skip_Namespace_Array",
|
||||||
"Value" : null,
|
"Value" : null,
|
||||||
"Values" : [
|
"Values" : [
|
||||||
|
"TH1_Hotfix",
|
||||||
|
"TH1_Logic.Core",
|
||||||
|
"Logic.Achievement"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -184,7 +187,7 @@
|
|||||||
{
|
{
|
||||||
"Type" : "Bool",
|
"Type" : "Bool",
|
||||||
"Key" : "Obfuscate_Classes",
|
"Key" : "Obfuscate_Classes",
|
||||||
"Value" : "True",
|
"Value" : "False",
|
||||||
"Values" : null
|
"Values" : null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -331,7 +334,7 @@
|
|||||||
{
|
{
|
||||||
"Type" : "Bool",
|
"Type" : "Bool",
|
||||||
"Key" : "Obfuscate_Fields",
|
"Key" : "Obfuscate_Fields",
|
||||||
"Value" : "True",
|
"Value" : "False",
|
||||||
"Values" : null
|
"Values" : null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -503,7 +506,7 @@
|
|||||||
{
|
{
|
||||||
"Type" : "Bool",
|
"Type" : "Bool",
|
||||||
"Key" : "Enable_Add_Random_Code",
|
"Key" : "Enable_Add_Random_Code",
|
||||||
"Value" : "True",
|
"Value" : "False",
|
||||||
"Values" : null
|
"Values" : null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -531,7 +534,7 @@
|
|||||||
{
|
{
|
||||||
"Type" : "Bool",
|
"Type" : "Bool",
|
||||||
"Key" : "Enable_String_Obfuscation",
|
"Key" : "Enable_String_Obfuscation",
|
||||||
"Value" : "True",
|
"Value" : "False",
|
||||||
"Values" : null
|
"Values" : null
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -553,7 +556,7 @@
|
|||||||
{
|
{
|
||||||
"Type" : "Bool",
|
"Type" : "Bool",
|
||||||
"Key" : "Enable_AntiTampering_Protection",
|
"Key" : "Enable_AntiTampering_Protection",
|
||||||
"Value" : "True",
|
"Value" : "False",
|
||||||
"Values" : null
|
"Values" : null
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -659,8 +662,8 @@
|
|||||||
{
|
{
|
||||||
"Type" : "Bool",
|
"Type" : "Bool",
|
||||||
"Key" : "Global_Enable_Obfuscation",
|
"Key" : "Global_Enable_Obfuscation",
|
||||||
"Value" : "True",
|
"Value" : "False",
|
||||||
"Values" : null
|
"Values" : null
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,7 +37,7 @@ namespace TH1_Logic.Hotfix
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var assembly = Assembly.Load(File.ReadAllBytes(hotfixPath));
|
var assembly = Assembly.Load(File.ReadAllBytes(hotfixPath));
|
||||||
LoadedAssembly = assembly;
|
LoadedAssembly = assembly;
|
||||||
LoadedAssemblyFullName = assembly.FullName;
|
LoadedAssemblyFullName = assembly.FullName;
|
||||||
@ -86,6 +86,11 @@ namespace TH1_Logic.Hotfix
|
|||||||
{
|
{
|
||||||
if (_aotMetadataLoaded) return;
|
if (_aotMetadataLoaded) return;
|
||||||
|
|
||||||
|
#if !ENABLE_IL2CPP
|
||||||
|
_aotMetadataLoaded = true;
|
||||||
|
Debug.Log("[TH1.Hotfix] Skip AOT metadata on non-IL2CPP scripting backend.");
|
||||||
|
return;
|
||||||
|
#else
|
||||||
var aotDir = Path.Combine(root, HotfixManifest.AotMetadataFolderName);
|
var aotDir = Path.Combine(root, HotfixManifest.AotMetadataFolderName);
|
||||||
var allLoaded = true;
|
var allLoaded = true;
|
||||||
|
|
||||||
@ -104,6 +109,7 @@ namespace TH1_Logic.Hotfix
|
|||||||
}
|
}
|
||||||
|
|
||||||
_aotMetadataLoaded = allLoaded;
|
_aotMetadataLoaded = allLoaded;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void InvokeHotfixEntryInternal(Assembly assembly)
|
private static void InvokeHotfixEntryInternal(Assembly assembly)
|
||||||
|
|||||||
@ -1,11 +1,14 @@
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using OPS.Obfuscator.Attribute;
|
||||||
|
|
||||||
namespace TH1_Hotfix
|
namespace TH1_Hotfix
|
||||||
{
|
{
|
||||||
|
[DoNotRename]
|
||||||
public static class HotfixEntry
|
public static class HotfixEntry
|
||||||
{
|
{
|
||||||
public const string Version = "0.1.0";
|
public const string Version = "0.1.0";
|
||||||
|
|
||||||
|
[DoNotRename]
|
||||||
public static void Initialize()
|
public static void Initialize()
|
||||||
{
|
{
|
||||||
Debug.Log($"[TH1.Hotfix] Initialize version {Version}");
|
Debug.Log($"[TH1.Hotfix] Initialize version {Version}");
|
||||||
|
|||||||
@ -9,6 +9,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Logic.Pool;
|
using Logic.Pool;
|
||||||
|
using OPS.Obfuscator.Attribute;
|
||||||
using RuntimeData;
|
using RuntimeData;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
@ -72,6 +73,7 @@ namespace Logic.Achievement
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[DoNotObfuscateClass]
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public abstract class AchievementConditionBase : ISerializationCallbackReceiver
|
public abstract class AchievementConditionBase : ISerializationCallbackReceiver
|
||||||
{
|
{
|
||||||
@ -126,6 +128,7 @@ namespace Logic.Achievement
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[DoNotObfuscateClass]
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class TrainGiantCondition : AchievementConditionBase
|
public class TrainGiantCondition : AchievementConditionBase
|
||||||
{
|
{
|
||||||
@ -203,6 +206,7 @@ namespace Logic.Achievement
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[DoNotObfuscateClass]
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class BuildWonderConditionCondition : AchievementConditionBase
|
public class BuildWonderConditionCondition : AchievementConditionBase
|
||||||
{
|
{
|
||||||
@ -277,6 +281,7 @@ namespace Logic.Achievement
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[DoNotObfuscateClass]
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class WonderInCityConditionCondition : AchievementConditionBase
|
public class WonderInCityConditionCondition : AchievementConditionBase
|
||||||
{
|
{
|
||||||
@ -341,6 +346,7 @@ namespace Logic.Achievement
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[DoNotObfuscateClass]
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class UnitOnWonderConditionCondition : AchievementConditionBase
|
public class UnitOnWonderConditionCondition : AchievementConditionBase
|
||||||
{
|
{
|
||||||
@ -434,6 +440,7 @@ namespace Logic.Achievement
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[DoNotObfuscateClass]
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class AroundBuildingsConditionCondition : AchievementConditionBase
|
public class AroundBuildingsConditionCondition : AchievementConditionBase
|
||||||
{
|
{
|
||||||
@ -530,6 +537,7 @@ namespace Logic.Achievement
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[DoNotObfuscateClass]
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class AroundWondersConditionCondition : AchievementConditionBase
|
public class AroundWondersConditionCondition : AchievementConditionBase
|
||||||
{
|
{
|
||||||
@ -613,6 +621,7 @@ namespace Logic.Achievement
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[DoNotObfuscateClass]
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class AroundEnemyUnitsConditionCondition : AchievementConditionBase
|
public class AroundEnemyUnitsConditionCondition : AchievementConditionBase
|
||||||
{
|
{
|
||||||
@ -699,6 +708,7 @@ namespace Logic.Achievement
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[DoNotObfuscateClass]
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class AroundSelfUnitsConditionCondition : AchievementConditionBase
|
public class AroundSelfUnitsConditionCondition : AchievementConditionBase
|
||||||
{
|
{
|
||||||
@ -785,6 +795,7 @@ namespace Logic.Achievement
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[DoNotObfuscateClass]
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class AroundCityGridsConditionCondition : AchievementConditionBase
|
public class AroundCityGridsConditionCondition : AchievementConditionBase
|
||||||
{
|
{
|
||||||
|
|||||||
@ -14,6 +14,7 @@ using Logic.Config;
|
|||||||
using Logic.CrashSight;
|
using Logic.CrashSight;
|
||||||
using Logic.Multilingual;
|
using Logic.Multilingual;
|
||||||
using Logic.PrefabPool;
|
using Logic.PrefabPool;
|
||||||
|
using OPS.Obfuscator.Attribute;
|
||||||
using RuntimeData;
|
using RuntimeData;
|
||||||
using TH1_Core.Events;
|
using TH1_Core.Events;
|
||||||
using TH1_Core.Managers;
|
using TH1_Core.Managers;
|
||||||
@ -38,36 +39,53 @@ using ConfigManager = TH1_Logic.Config.ConfigManager;
|
|||||||
namespace TH1_Logic.Core
|
namespace TH1_Logic.Core
|
||||||
{
|
{
|
||||||
// Runtime entry loaded by the AOT bootstrap after TH1.Hotfix is available.
|
// Runtime entry loaded by the AOT bootstrap after TH1.Hotfix is available.
|
||||||
|
[DoNotRename]
|
||||||
public class Main : MonoBehaviour
|
public class Main : MonoBehaviour
|
||||||
{
|
{
|
||||||
private const string StartGameAnnouncementTimerMessage = "Main_CenterMessage_Anim";
|
private const string StartGameAnnouncementTimerMessage = "Main_CenterMessage_Anim";
|
||||||
|
|
||||||
public static Main Instance { get; private set; }
|
public static Main Instance { get; private set; }
|
||||||
[Header("Debug Param")]
|
[Header("Debug Param")]
|
||||||
|
[DoNotRename]
|
||||||
public bool NoAI = false;
|
public bool NoAI = false;
|
||||||
|
[DoNotRename]
|
||||||
public bool FullSight = true;
|
public bool FullSight = true;
|
||||||
|
[DoNotRename]
|
||||||
public float AIActionTime = 0.2f;
|
public float AIActionTime = 0.2f;
|
||||||
|
[DoNotRename]
|
||||||
public bool AIAllTech = true;
|
public bool AIAllTech = true;
|
||||||
|
[DoNotRename]
|
||||||
public bool AIMoreMoney = true;
|
public bool AIMoreMoney = true;
|
||||||
|
[DoNotRename]
|
||||||
public float LandThreshold = -1f;
|
public float LandThreshold = -1f;
|
||||||
|
[DoNotRename]
|
||||||
public float AnimationSpeed = 1f;
|
public float AnimationSpeed = 1f;
|
||||||
|
[DoNotRename]
|
||||||
public bool DebugMode = false;
|
public bool DebugMode = false;
|
||||||
|
[DoNotRename]
|
||||||
public bool DebugHideCenterMessage = false;
|
public bool DebugHideCenterMessage = false;
|
||||||
|
|
||||||
[Header("Play Settings")]
|
[Header("Play Settings")]
|
||||||
|
[DoNotRename]
|
||||||
public int cityCount;
|
public int cityCount;
|
||||||
|
[DoNotRename]
|
||||||
public int unitCount;
|
public int unitCount;
|
||||||
|
[DoNotRename]
|
||||||
public int turn;
|
public int turn;
|
||||||
|
[DoNotRename]
|
||||||
public int renko = 0; //真正的玩家一人
|
public int renko = 0; //真正的玩家一人
|
||||||
|
[DoNotRename]
|
||||||
public bool IsNetActionExecuting = false;
|
public bool IsNetActionExecuting = false;
|
||||||
|
|
||||||
|
|
||||||
[Header("RenderObject")]
|
[Header("RenderObject")]
|
||||||
|
[DoNotRename]
|
||||||
public GameObject ROMapRenderer;
|
public GameObject ROMapRenderer;
|
||||||
|
|
||||||
|
|
||||||
//用来帮助借调一些必须通过main来承载的数据
|
//用来帮助借调一些必须通过main来承载的数据
|
||||||
[Header("SuperBank")]
|
[Header("SuperBank")]
|
||||||
|
[DoNotRename]
|
||||||
public Material URPDefaultMat;
|
public Material URPDefaultMat;
|
||||||
//--------------------------------new data type--------------------------------
|
//--------------------------------new data type--------------------------------
|
||||||
[NonSerialized] public MapConfig MapConfig;
|
[NonSerialized] public MapConfig MapConfig;
|
||||||
@ -138,6 +156,7 @@ namespace TH1_Logic.Core
|
|||||||
MatchConfigManager.Instance.Init();
|
MatchConfigManager.Instance.Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DoNotRename]
|
||||||
IEnumerator Start()
|
IEnumerator Start()
|
||||||
{
|
{
|
||||||
_isStarted = false;
|
_isStarted = false;
|
||||||
@ -820,6 +839,7 @@ namespace TH1_Logic.Core
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update is called once per frame
|
// Update is called once per frame
|
||||||
|
[DoNotRename]
|
||||||
void Update()
|
void Update()
|
||||||
{
|
{
|
||||||
if (!_isStarted)
|
if (!_isStarted)
|
||||||
@ -916,6 +936,7 @@ namespace TH1_Logic.Core
|
|||||||
MapData = null;
|
MapData = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DoNotRename]
|
||||||
private void OnDestroy()
|
private void OnDestroy()
|
||||||
{
|
{
|
||||||
LobbyManager.Instance.Lobby.Cleanup();
|
LobbyManager.Instance.Lobby.Cleanup();
|
||||||
|
|||||||
@ -1,7 +1,11 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using OPS.Mono.Cecil;
|
||||||
using TH1_Logic.Hotfix;
|
using TH1_Logic.Hotfix;
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
using UnityEditor.Build;
|
using UnityEditor.Build;
|
||||||
@ -13,6 +17,11 @@ namespace TH1_Logic.Editor.HybridCLR
|
|||||||
{
|
{
|
||||||
private const string HybridClrInstallerMenu = "HybridCLR/Installer...";
|
private const string HybridClrInstallerMenu = "HybridCLR/Installer...";
|
||||||
private const string HybridClrGenerateAllMenu = "HybridCLR/Generate/All";
|
private const string HybridClrGenerateAllMenu = "HybridCLR/Generate/All";
|
||||||
|
private const string OpsObfuscatorSettingsPath = "Assets/OPS/Obfuscator/Settings/Obfuscator_Settings.json";
|
||||||
|
private static readonly Regex OpsObfuscationRegex = new Regex(
|
||||||
|
"(?<prefix>\"Key\"\\s*:\\s*\"Global_Enable_Obfuscation\"\\s*,\\s*\"Value\"\\s*:\\s*\")(?<value>True|False)(?<suffix>\")",
|
||||||
|
RegexOptions.Compiled);
|
||||||
|
|
||||||
public const long MinimumHotfixDllSize = 64 * 1024;
|
public const long MinimumHotfixDllSize = 64 * 1024;
|
||||||
|
|
||||||
[MenuItem("Tools/TH1/iOS Migration/HybridCLR/1. Run HybridCLR Installer")]
|
[MenuItem("Tools/TH1/iOS Migration/HybridCLR/1. Run HybridCLR Installer")]
|
||||||
@ -74,6 +83,11 @@ namespace TH1_Logic.Editor.HybridCLR
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static bool BuildAndCopyHotfixArtifacts(bool developmentBuild)
|
public static bool BuildAndCopyHotfixArtifacts(bool developmentBuild)
|
||||||
|
{
|
||||||
|
return BuildAndCopyHotfixArtifacts(developmentBuild, IsHotfixObfuscationEnabled());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool BuildAndCopyHotfixArtifacts(bool developmentBuild, bool obfuscateHotfixDll)
|
||||||
{
|
{
|
||||||
if (!TryCompileHotfixDll(developmentBuild))
|
if (!TryCompileHotfixDll(developmentBuild))
|
||||||
{
|
{
|
||||||
@ -81,7 +95,13 @@ namespace TH1_Logic.Editor.HybridCLR
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var copiedHotfixDll = CopyHotfixDll();
|
if (!TryPrepareHotfixDllForCopy(obfuscateHotfixDll, out var hotfixDllPath))
|
||||||
|
{
|
||||||
|
Debug.LogError("[TH1.HybridCLR] Prepare hotfix dll failed. Skip copying hotfix artifacts.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var copiedHotfixDll = CopyHotfixDll(hotfixDllPath);
|
||||||
var copiedAotMetadata = CopyAotMetadataDlls();
|
var copiedAotMetadata = CopyAotMetadataDlls();
|
||||||
AssetDatabase.Refresh();
|
AssetDatabase.Refresh();
|
||||||
return copiedHotfixDll && copiedAotMetadata;
|
return copiedHotfixDll && copiedAotMetadata;
|
||||||
@ -99,6 +119,11 @@ namespace TH1_Logic.Editor.HybridCLR
|
|||||||
return Path.Combine("HybridCLRData", "HotUpdateDlls", buildTarget.ToString(), HotfixManifest.HotfixAssemblyName + ".dll");
|
return Path.Combine("HybridCLRData", "HotUpdateDlls", buildTarget.ToString(), HotfixManifest.HotfixAssemblyName + ".dll");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string GetObfuscatedHotfixDllPath(BuildTarget buildTarget)
|
||||||
|
{
|
||||||
|
return Path.Combine("HybridCLRData", "ObfuscatedHotUpdateDlls", buildTarget.ToString(), HotfixManifest.HotfixAssemblyName + ".dll");
|
||||||
|
}
|
||||||
|
|
||||||
public static string GetStreamingHotfixDllPath()
|
public static string GetStreamingHotfixDllPath()
|
||||||
{
|
{
|
||||||
return Path.Combine(
|
return Path.Combine(
|
||||||
@ -137,9 +162,28 @@ namespace TH1_Logic.Editor.HybridCLR
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool CopyHotfixDll()
|
private static bool TryPrepareHotfixDllForCopy(bool obfuscateHotfixDll, out string hotfixDllPath)
|
||||||
{
|
{
|
||||||
var source = GetHotfixDllSourcePath(EditorUserBuildSettings.activeBuildTarget);
|
var source = GetHotfixDllSourcePath(EditorUserBuildSettings.activeBuildTarget);
|
||||||
|
hotfixDllPath = source;
|
||||||
|
|
||||||
|
if (!IsUsableHotfixDll(source, out var message))
|
||||||
|
{
|
||||||
|
Debug.LogError($"[TH1.HybridCLR] hotfix dll is not usable before obfuscation: {message}");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!obfuscateHotfixDll)
|
||||||
|
{
|
||||||
|
Debug.Log("[TH1.HybridCLR] OPS obfuscation is disabled. Copy raw hotfix dll.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TryObfuscateHotfixDll(source, out hotfixDllPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool CopyHotfixDll(string source)
|
||||||
|
{
|
||||||
if (File.Exists(source) && new FileInfo(source).Length < MinimumHotfixDllSize)
|
if (File.Exists(source) && new FileInfo(source).Length < MinimumHotfixDllSize)
|
||||||
{
|
{
|
||||||
Debug.LogError($"[TH1.HybridCLR] hotfix dll is too small and looks stale: {source}");
|
Debug.LogError($"[TH1.HybridCLR] hotfix dll is too small and looks stale: {source}");
|
||||||
@ -151,15 +195,489 @@ namespace TH1_Logic.Editor.HybridCLR
|
|||||||
return CopyFile(source, destination, "hotfix dll");
|
return CopyFile(source, destination, "hotfix dll");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool IsHotfixObfuscationEnabled()
|
||||||
|
{
|
||||||
|
var path = GetProjectPath(OpsObfuscatorSettingsPath);
|
||||||
|
if (!File.Exists(path))
|
||||||
|
{
|
||||||
|
Debug.LogWarning($"[TH1.HybridCLR] OPS settings missing. Hotfix dll will not be obfuscated: {OpsObfuscatorSettingsPath}");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!TryReadOpsObfuscationEnabled(out var enabled))
|
||||||
|
{
|
||||||
|
Debug.LogWarning($"[TH1.HybridCLR] Cannot read Global_Enable_Obfuscation from {OpsObfuscatorSettingsPath}. Hotfix dll will not be obfuscated.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool TryObfuscateHotfixDll(string source, out string obfuscatedPath)
|
||||||
|
{
|
||||||
|
var targetPath = GetObfuscatedHotfixDllPath(EditorUserBuildSettings.activeBuildTarget);
|
||||||
|
obfuscatedPath = targetPath;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(Path.GetDirectoryName(targetPath));
|
||||||
|
File.Copy(source, targetPath, true);
|
||||||
|
|
||||||
|
RunWithOpsObfuscationTemporarilyEnabled(() => RunOpsObfuscationForHotfixDll(targetPath));
|
||||||
|
|
||||||
|
if (!IsUsableHotfixDll(targetPath, out var message))
|
||||||
|
{
|
||||||
|
Debug.LogError($"[TH1.HybridCLR] obfuscated hotfix dll is not usable: {message}");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!VerifyHotfixObfuscationKeepRules(targetPath))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Log($"[TH1.HybridCLR] Obfuscated hotfix dll: {targetPath}");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.LogError($"[TH1.HybridCLR] OPS obfuscate hotfix dll failed:\n{e}");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void RunWithOpsObfuscationTemporarilyEnabled(System.Action action)
|
||||||
|
{
|
||||||
|
var canRestore = TryReadOpsObfuscationEnabled(out var previousEnabled);
|
||||||
|
if (canRestore && !previousEnabled)
|
||||||
|
{
|
||||||
|
SetOpsObfuscationEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
action();
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (canRestore)
|
||||||
|
{
|
||||||
|
SetOpsObfuscationEnabled(previousEnabled);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool TryReadOpsObfuscationEnabled(out bool enabled)
|
||||||
|
{
|
||||||
|
enabled = false;
|
||||||
|
var path = GetProjectPath(OpsObfuscatorSettingsPath);
|
||||||
|
if (!File.Exists(path))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var json = File.ReadAllText(path);
|
||||||
|
var matches = OpsObfuscationRegex.Matches(json);
|
||||||
|
if (matches.Count != 1)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
enabled = string.Equals(matches[0].Groups["value"].Value, "True", StringComparison.OrdinalIgnoreCase);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetOpsObfuscationEnabled(bool enabled)
|
||||||
|
{
|
||||||
|
var path = GetProjectPath(OpsObfuscatorSettingsPath);
|
||||||
|
if (!File.Exists(path))
|
||||||
|
{
|
||||||
|
throw new FileNotFoundException($"OPS obfuscator settings not found: {OpsObfuscatorSettingsPath}", path);
|
||||||
|
}
|
||||||
|
|
||||||
|
var json = File.ReadAllText(path);
|
||||||
|
var matches = OpsObfuscationRegex.Matches(json);
|
||||||
|
if (matches.Count != 1)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException($"Cannot find a unique Global_Enable_Obfuscation entry in {OpsObfuscatorSettingsPath}.");
|
||||||
|
}
|
||||||
|
|
||||||
|
var updated = OpsObfuscationRegex.Replace(json, match =>
|
||||||
|
$"{match.Groups["prefix"].Value}{(enabled ? "True" : "False")}{match.Groups["suffix"].Value}", 1);
|
||||||
|
|
||||||
|
if (updated == json) return;
|
||||||
|
|
||||||
|
File.WriteAllText(path, updated);
|
||||||
|
AssetDatabase.ImportAsset(OpsObfuscatorSettingsPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void RunOpsObfuscationForHotfixDll(string hotfixDllPath)
|
||||||
|
{
|
||||||
|
var editorSettingsType = RequireType("OPS.Obfuscator.Editor.Settings.Unity.Editor.EditorSettings");
|
||||||
|
var buildSettingsType = RequireType("OPS.Obfuscator.Editor.Settings.Unity.Build.BuildSettings");
|
||||||
|
var assemblyLoadInfoType = RequireType("OPS.Obfuscator.Editor.Assembly.AssemblyLoadInfo");
|
||||||
|
var obfuscatorType = RequireType("OPS.Obfuscator.Editor.Obfuscator");
|
||||||
|
|
||||||
|
var editorSettings = CreateInstance(editorSettingsType);
|
||||||
|
var buildSettings = CreateInstance(buildSettingsType);
|
||||||
|
|
||||||
|
SetMember(buildSettings, "IsDevelopmentBuild", EditorUserBuildSettings.development);
|
||||||
|
SetMember(buildSettings, "BuildTarget", EditorUserBuildSettings.activeBuildTarget);
|
||||||
|
SetMember(buildSettings, "BuildTargetGroup", EditorUserBuildSettings.selectedBuildTargetGroup);
|
||||||
|
SetMember(buildSettings, "UnityBuildReport", null);
|
||||||
|
SetMember(buildSettings, "IsIL2CPPBuild", PlayerSettings.GetScriptingBackend(EditorUserBuildSettings.selectedBuildTargetGroup) == ScriptingImplementation.IL2CPP);
|
||||||
|
var compression = GetOpsCompressionValue(buildSettingsType);
|
||||||
|
if (compression != null)
|
||||||
|
{
|
||||||
|
TrySetMember(buildSettings, "Compression", compression);
|
||||||
|
}
|
||||||
|
SetMember(buildSettings, "BuildIntoProject", false);
|
||||||
|
SetMember(buildSettings, "AssemblyDependencyDirectoryPathList", CreateStringList(GetOpsDependencyDirectories(hotfixDllPath)));
|
||||||
|
SetMember(buildSettings, "AssemblyLoadInfoList", CreateAssemblyLoadInfoList(assemblyLoadInfoType, hotfixDllPath));
|
||||||
|
|
||||||
|
obfuscatorType.GetMethod("Init", BindingFlags.Public | BindingFlags.Static)?.Invoke(null, null);
|
||||||
|
var singleton = obfuscatorType.GetProperty("Singleton", BindingFlags.Public | BindingFlags.Static)?.GetValue(null);
|
||||||
|
if (singleton == null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("OPS Obfuscator singleton is unavailable.");
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorApplication.LockReloadAssemblies();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var method = obfuscatorType.GetMethod("PostAssemblyBuild", BindingFlags.Public | BindingFlags.Instance);
|
||||||
|
if (method == null)
|
||||||
|
{
|
||||||
|
throw new MissingMethodException(obfuscatorType.FullName, "PostAssemblyBuild");
|
||||||
|
}
|
||||||
|
|
||||||
|
method.Invoke(singleton, new[] { editorSettings, buildSettings });
|
||||||
|
}
|
||||||
|
catch (TargetInvocationException e)
|
||||||
|
{
|
||||||
|
throw e.InnerException ?? e;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
EditorApplication.UnlockReloadAssemblies();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IList CreateAssemblyLoadInfoList(Type assemblyLoadInfoType, string hotfixDllPath)
|
||||||
|
{
|
||||||
|
var listType = typeof(List<>).MakeGenericType(assemblyLoadInfoType);
|
||||||
|
var list = (IList)Activator.CreateInstance(listType);
|
||||||
|
list.Add(CreateAssemblyLoadInfo(assemblyLoadInfoType, hotfixDllPath, true, false));
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static object CreateAssemblyLoadInfo(Type assemblyLoadInfoType, string filePath, bool obfuscate, bool helper)
|
||||||
|
{
|
||||||
|
var loadInfo = CreateInstance(assemblyLoadInfoType);
|
||||||
|
SetMember(loadInfo, "FilePath", Path.GetFullPath(filePath));
|
||||||
|
SetMember(loadInfo, "Obfuscate", obfuscate);
|
||||||
|
TrySetMember(loadInfo, "IsUnityAssembly", !helper);
|
||||||
|
TrySetMember(loadInfo, "IsThirdPartyAssembly", helper);
|
||||||
|
TrySetMember(loadInfo, "IsThirdParty", helper);
|
||||||
|
TrySetMember(loadInfo, "IsHelperAssembly", helper);
|
||||||
|
TrySetMember(loadInfo, "IsHelper", helper);
|
||||||
|
return loadInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<string> CreateStringList(IEnumerable<string> values)
|
||||||
|
{
|
||||||
|
return values
|
||||||
|
.Where(path => !string.IsNullOrWhiteSpace(path))
|
||||||
|
.Select(Path.GetFullPath)
|
||||||
|
.Where(Directory.Exists)
|
||||||
|
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IEnumerable<string> GetOpsDependencyDirectories(string hotfixDllPath)
|
||||||
|
{
|
||||||
|
yield return Path.GetDirectoryName(hotfixDllPath);
|
||||||
|
yield return GetProjectPath("Library/ScriptAssemblies");
|
||||||
|
yield return GetProjectPath("Assets/Plugins");
|
||||||
|
yield return GetProjectPath("Assets/OPS/Plugins");
|
||||||
|
yield return GetProjectPath("Assets/OPS/Obfuscator/Plugins");
|
||||||
|
yield return GetProjectPath("Assets/OPS/Obfuscator/Editor/Plugins");
|
||||||
|
|
||||||
|
var unityEditorDir = EditorApplication.applicationContentsPath;
|
||||||
|
yield return Path.Combine(unityEditorDir, "Managed");
|
||||||
|
yield return Path.Combine(unityEditorDir, "Managed", "UnityEngine");
|
||||||
|
yield return Path.Combine(unityEditorDir, "UnityReferenceAssemblies", "unity-4.8-api");
|
||||||
|
yield return Path.Combine(unityEditorDir, "UnityReferenceAssemblies", "unity-4.8-api", "Facades");
|
||||||
|
|
||||||
|
var packageCache = GetProjectPath("Library/PackageCache");
|
||||||
|
if (Directory.Exists(packageCache))
|
||||||
|
{
|
||||||
|
foreach (var dll in Directory.EnumerateFiles(packageCache, "*.dll", SearchOption.AllDirectories))
|
||||||
|
{
|
||||||
|
yield return Path.GetDirectoryName(dll);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
|
||||||
|
{
|
||||||
|
if (assembly.IsDynamic) continue;
|
||||||
|
var location = string.Empty;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
location = assembly.Location;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// Some editor assemblies do not expose a stable file location.
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(location))
|
||||||
|
{
|
||||||
|
yield return Path.GetDirectoryName(location);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool VerifyHotfixObfuscationKeepRules(string hotfixDllPath)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using var assembly = AssemblyDefinition.ReadAssembly(hotfixDllPath);
|
||||||
|
var missing = new List<string>();
|
||||||
|
|
||||||
|
var entryType = FindCecilType(assembly.MainModule, HotfixManifest.EntryTypeName);
|
||||||
|
if (entryType == null)
|
||||||
|
{
|
||||||
|
missing.Add(HotfixManifest.EntryTypeName);
|
||||||
|
}
|
||||||
|
else if (!entryType.Methods.Any(method =>
|
||||||
|
method.Name == HotfixManifest.EntryMethodName &&
|
||||||
|
method.IsPublic &&
|
||||||
|
method.IsStatic))
|
||||||
|
{
|
||||||
|
missing.Add($"{HotfixManifest.EntryTypeName}.{HotfixManifest.EntryMethodName}");
|
||||||
|
}
|
||||||
|
|
||||||
|
var mainType = FindCecilType(assembly.MainModule, HotfixManifest.RuntimeMainTypeName);
|
||||||
|
if (mainType == null)
|
||||||
|
{
|
||||||
|
missing.Add(HotfixManifest.RuntimeMainTypeName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (var fieldName in RequiredRuntimeMainFieldNames)
|
||||||
|
{
|
||||||
|
if (!mainType.Fields.Any(field => field.Name == fieldName))
|
||||||
|
{
|
||||||
|
missing.Add($"{HotfixManifest.RuntimeMainTypeName}.{fieldName}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var typeName in RequiredAchievementConditionTypeNames)
|
||||||
|
{
|
||||||
|
if (FindCecilType(assembly.MainModule, typeName) == null)
|
||||||
|
{
|
||||||
|
missing.Add(typeName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (missing.Count <= 0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.LogError($"[TH1.HybridCLR] obfuscated hotfix dll is missing required reflection metadata: {string.Join(", ", missing)}");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.LogError($"[TH1.HybridCLR] verify obfuscated hotfix dll failed: {hotfixDllPath}\n{e}");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static readonly string[] RequiredRuntimeMainFieldNames =
|
||||||
|
{
|
||||||
|
"NoAI",
|
||||||
|
"FullSight",
|
||||||
|
"AIActionTime",
|
||||||
|
"AIAllTech",
|
||||||
|
"AIMoreMoney",
|
||||||
|
"LandThreshold",
|
||||||
|
"AnimationSpeed",
|
||||||
|
"DebugMode",
|
||||||
|
"DebugHideCenterMessage",
|
||||||
|
"cityCount",
|
||||||
|
"unitCount",
|
||||||
|
"turn",
|
||||||
|
"renko",
|
||||||
|
"IsNetActionExecuting",
|
||||||
|
"ROMapRenderer",
|
||||||
|
"URPDefaultMat",
|
||||||
|
};
|
||||||
|
|
||||||
|
private static readonly string[] RequiredAchievementConditionTypeNames =
|
||||||
|
{
|
||||||
|
"Logic.Achievement.AchievementConditionBase",
|
||||||
|
"Logic.Achievement.TrainGiantCondition",
|
||||||
|
"Logic.Achievement.BuildWonderConditionCondition",
|
||||||
|
"Logic.Achievement.WonderInCityConditionCondition",
|
||||||
|
"Logic.Achievement.UnitOnWonderConditionCondition",
|
||||||
|
"Logic.Achievement.AroundBuildingsConditionCondition",
|
||||||
|
"Logic.Achievement.AroundWondersConditionCondition",
|
||||||
|
"Logic.Achievement.AroundEnemyUnitsConditionCondition",
|
||||||
|
"Logic.Achievement.AroundSelfUnitsConditionCondition",
|
||||||
|
"Logic.Achievement.AroundCityGridsConditionCondition",
|
||||||
|
};
|
||||||
|
|
||||||
|
private static TypeDefinition FindCecilType(ModuleDefinition module, string fullName)
|
||||||
|
{
|
||||||
|
return EnumerateCecilTypes(module.Types)
|
||||||
|
.FirstOrDefault(type => type.FullName == fullName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IEnumerable<TypeDefinition> EnumerateCecilTypes(IEnumerable<TypeDefinition> types)
|
||||||
|
{
|
||||||
|
foreach (var type in types)
|
||||||
|
{
|
||||||
|
yield return type;
|
||||||
|
|
||||||
|
foreach (var nestedType in EnumerateCecilTypes(type.NestedTypes))
|
||||||
|
{
|
||||||
|
yield return nestedType;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Type RequireType(string fullName)
|
||||||
|
{
|
||||||
|
var type = FindType(fullName);
|
||||||
|
if (type == null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException($"Required type not found: {fullName}");
|
||||||
|
}
|
||||||
|
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static object CreateInstance(Type type)
|
||||||
|
{
|
||||||
|
var defaultCtor = type.GetConstructor(
|
||||||
|
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
|
||||||
|
null,
|
||||||
|
Type.EmptyTypes,
|
||||||
|
null);
|
||||||
|
if (defaultCtor != null)
|
||||||
|
{
|
||||||
|
return defaultCtor.Invoke(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
var ctor = type.GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
|
||||||
|
.OrderBy(item => item.GetParameters().Length)
|
||||||
|
.FirstOrDefault();
|
||||||
|
if (ctor == null)
|
||||||
|
{
|
||||||
|
throw new MissingMethodException(type.FullName, ".ctor");
|
||||||
|
}
|
||||||
|
|
||||||
|
var parameters = ctor.GetParameters();
|
||||||
|
var args = parameters
|
||||||
|
.Select(parameter => parameter.HasDefaultValue ? parameter.DefaultValue : GetDefaultValue(parameter.ParameterType))
|
||||||
|
.ToArray();
|
||||||
|
return ctor.Invoke(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static object GetDefaultValue(Type type)
|
||||||
|
{
|
||||||
|
return type.IsValueType ? Activator.CreateInstance(type) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static object GetOpsCompressionValue(Type buildSettingsType)
|
||||||
|
{
|
||||||
|
var memberType = GetMemberType(buildSettingsType, "Compression");
|
||||||
|
var method = typeof(EditorUserBuildSettings).GetMethod(
|
||||||
|
"GetCompressionType",
|
||||||
|
BindingFlags.NonPublic | BindingFlags.Static);
|
||||||
|
if (memberType == null || method == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var unityCompression = method.Invoke(null, new object[] { EditorUserBuildSettings.selectedBuildTargetGroup });
|
||||||
|
var value = Convert.ToInt32(unityCompression);
|
||||||
|
return Enum.ToObject(memberType, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Type GetMemberType(Type type, string memberName)
|
||||||
|
{
|
||||||
|
var property = type.GetProperty(memberName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
|
||||||
|
if (property != null)
|
||||||
|
{
|
||||||
|
return property.PropertyType;
|
||||||
|
}
|
||||||
|
|
||||||
|
var field = type.GetField(memberName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
|
||||||
|
return field?.FieldType;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void SetMember(object instance, string memberName, object value)
|
||||||
|
{
|
||||||
|
if (instance == null) throw new ArgumentNullException(nameof(instance));
|
||||||
|
|
||||||
|
var type = instance.GetType();
|
||||||
|
var property = type.GetProperty(memberName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
|
||||||
|
if (property != null)
|
||||||
|
{
|
||||||
|
var setter = property.GetSetMethod(true);
|
||||||
|
if (setter != null)
|
||||||
|
{
|
||||||
|
setter.Invoke(instance, new[] { value });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var field = type.GetField(memberName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
|
||||||
|
if (field != null)
|
||||||
|
{
|
||||||
|
field.SetValue(instance, value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new MissingMemberException(type.FullName, memberName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool TrySetMember(object instance, string memberName, object value)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
SetMember(instance, memberName, value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (MissingMemberException)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static bool CopyAotMetadataDlls()
|
private static bool CopyAotMetadataDlls()
|
||||||
{
|
{
|
||||||
var sourceDir = GetAotMetadataSourceDir(EditorUserBuildSettings.activeBuildTarget);
|
var sourceDir = GetAotMetadataSourceDir(EditorUserBuildSettings.activeBuildTarget);
|
||||||
var destinationDir = GetStreamingAotMetadataDir();
|
var destinationDir = GetStreamingAotMetadataDir();
|
||||||
|
var group = BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget);
|
||||||
|
var requiresAotMetadata = PlayerSettings.GetScriptingBackend(group) == ScriptingImplementation.IL2CPP;
|
||||||
|
|
||||||
if (!Directory.Exists(sourceDir))
|
if (!Directory.Exists(sourceDir))
|
||||||
{
|
{
|
||||||
Debug.LogError($"[TH1.HybridCLR] AOT metadata source missing: {sourceDir}. Run HybridCLR Installer, then HybridCLR/Generate/All after an IL2CPP target is selected.");
|
var message = $"[TH1.HybridCLR] AOT metadata source missing: {sourceDir}. Run HybridCLR Installer, then HybridCLR/Generate/All after an IL2CPP target is selected.";
|
||||||
return false;
|
if (requiresAotMetadata)
|
||||||
|
{
|
||||||
|
Debug.LogError(message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.LogWarning(message + " Current target uses Mono, so continue without AOT metadata.");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
var copiedAll = true;
|
var copiedAll = true;
|
||||||
@ -171,7 +689,15 @@ namespace TH1_Logic.Editor.HybridCLR
|
|||||||
if (!File.Exists(source))
|
if (!File.Exists(source))
|
||||||
{
|
{
|
||||||
copiedAll = false;
|
copiedAll = false;
|
||||||
Debug.LogError($"[TH1.HybridCLR] AOT metadata dll missing: {source}");
|
var message = $"[TH1.HybridCLR] AOT metadata dll missing: {source}";
|
||||||
|
if (requiresAotMetadata)
|
||||||
|
{
|
||||||
|
Debug.LogError(message);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.LogWarning(message + " Current target uses Mono, so continue without this AOT metadata file.");
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,7 +705,7 @@ namespace TH1_Logic.Editor.HybridCLR
|
|||||||
Debug.Log($"[TH1.HybridCLR] Copied AOT metadata: {destination}");
|
Debug.Log($"[TH1.HybridCLR] Copied AOT metadata: {destination}");
|
||||||
}
|
}
|
||||||
|
|
||||||
return copiedAll;
|
return requiresAotMetadata ? copiedAll : true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool ExecuteHybridClrMenu(string menuPath)
|
private static bool ExecuteHybridClrMenu(string menuPath)
|
||||||
@ -314,6 +840,12 @@ namespace TH1_Logic.Editor.HybridCLR
|
|||||||
return $"{length} B";
|
return $"{length} B";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string GetProjectPath(string relativePath)
|
||||||
|
{
|
||||||
|
var projectRoot = Directory.GetParent(Application.dataPath)?.FullName ?? Application.dataPath;
|
||||||
|
return Path.Combine(projectRoot, relativePath.Replace('/', Path.DirectorySeparatorChar));
|
||||||
|
}
|
||||||
|
|
||||||
private static Type FindType(string fullName)
|
private static Type FindType(string fullName)
|
||||||
{
|
{
|
||||||
return AppDomain.CurrentDomain.GetAssemblies()
|
return AppDomain.CurrentDomain.GetAssemblies()
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using TH1_Logic.Editor.HybridCLR;
|
using TH1_Logic.Editor.HybridCLR;
|
||||||
@ -155,6 +156,17 @@ namespace TH1_Logic.Editor
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (GUILayout.Button("测试 Hotfix 混淆", GUILayout.Height(32)))
|
||||||
|
{
|
||||||
|
RunAction("Test Hotfix Obfuscation", () =>
|
||||||
|
{
|
||||||
|
if (!TH1HybridCLRBuildTools.BuildAndCopyHotfixArtifacts(_developmentBuild, true))
|
||||||
|
{
|
||||||
|
throw new Exception("Test hotfix obfuscation failed. See Console for details.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
EditorGUILayout.Space(6);
|
EditorGUILayout.Space(6);
|
||||||
EditorGUILayout.LabelField("YooAsset", EditorStyles.boldLabel);
|
EditorGUILayout.LabelField("YooAsset", EditorStyles.boldLabel);
|
||||||
using (new EditorGUILayout.HorizontalScope())
|
using (new EditorGUILayout.HorizontalScope())
|
||||||
@ -303,18 +315,48 @@ namespace TH1_Logic.Editor
|
|||||||
internal static class TH1MigrationBuildStatus
|
internal static class TH1MigrationBuildStatus
|
||||||
{
|
{
|
||||||
public static List<MigrationStatusItem> Collect(BuildTarget target)
|
public static List<MigrationStatusItem> Collect(BuildTarget target)
|
||||||
|
{
|
||||||
|
return Collect(target, TH1HybridCLRBuildTools.IsHotfixObfuscationEnabled(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<MigrationStatusItem> Collect(BuildTarget target, bool expectObfuscatedHotfix)
|
||||||
|
{
|
||||||
|
return Collect(target, expectObfuscatedHotfix, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<MigrationStatusItem> Collect(BuildTarget target, bool expectObfuscatedHotfix, bool checkYooAssetAb)
|
||||||
{
|
{
|
||||||
var items = new List<MigrationStatusItem>();
|
var items = new List<MigrationStatusItem>();
|
||||||
AddHotfixStatus(items, target);
|
AddHotfixStatus(items, target, expectObfuscatedHotfix);
|
||||||
AddAotMetadataStatus(items, target);
|
AddAotMetadataStatus(items, target);
|
||||||
AddYooAssetStatus(items);
|
if (checkYooAssetAb)
|
||||||
|
{
|
||||||
|
AddYooAssetStatus(items);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
items.Add(new MigrationStatusItem(
|
||||||
|
"4. YooAsset 内置 AB",
|
||||||
|
MigrationStatusLevel.Warning,
|
||||||
|
"已按一体化出包选项跳过检查,将沿用 StreamingAssets 中已有的 YooAsset AB。"));
|
||||||
|
}
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<string> GetBuildBlockingMessages(BuildTarget target)
|
public static List<string> GetBuildBlockingMessages(BuildTarget target)
|
||||||
|
{
|
||||||
|
return GetBuildBlockingMessages(target, TH1HybridCLRBuildTools.IsHotfixObfuscationEnabled(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<string> GetBuildBlockingMessages(BuildTarget target, bool expectObfuscatedHotfix)
|
||||||
|
{
|
||||||
|
return GetBuildBlockingMessages(target, expectObfuscatedHotfix, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<string> GetBuildBlockingMessages(BuildTarget target, bool expectObfuscatedHotfix, bool checkYooAssetAb)
|
||||||
{
|
{
|
||||||
var errors = new List<string>();
|
var errors = new List<string>();
|
||||||
foreach (var item in Collect(target))
|
foreach (var item in Collect(target, expectObfuscatedHotfix, checkYooAssetAb))
|
||||||
{
|
{
|
||||||
if (item.Level == MigrationStatusLevel.Error)
|
if (item.Level == MigrationStatusLevel.Error)
|
||||||
{
|
{
|
||||||
@ -325,9 +367,10 @@ namespace TH1_Logic.Editor
|
|||||||
return errors;
|
return errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void AddHotfixStatus(List<MigrationStatusItem> items, BuildTarget target)
|
private static void AddHotfixStatus(List<MigrationStatusItem> items, BuildTarget target, bool expectObfuscatedHotfix)
|
||||||
{
|
{
|
||||||
var source = TH1HybridCLRBuildTools.GetHotfixDllSourcePath(target);
|
var source = TH1HybridCLRBuildTools.GetHotfixDllSourcePath(target);
|
||||||
|
var obfuscated = TH1HybridCLRBuildTools.GetObfuscatedHotfixDllPath(target);
|
||||||
var streaming = TH1HybridCLRBuildTools.GetStreamingHotfixDllPath();
|
var streaming = TH1HybridCLRBuildTools.GetStreamingHotfixDllPath();
|
||||||
|
|
||||||
var sourceOk = TH1HybridCLRBuildTools.IsUsableHotfixDll(source, out var sourceMessage);
|
var sourceOk = TH1HybridCLRBuildTools.IsUsableHotfixDll(source, out var sourceMessage);
|
||||||
@ -336,6 +379,22 @@ namespace TH1_Logic.Editor
|
|||||||
sourceOk ? MigrationStatusLevel.Ok : MigrationStatusLevel.Error,
|
sourceOk ? MigrationStatusLevel.Ok : MigrationStatusLevel.Error,
|
||||||
$"{sourceMessage}\n这是 HybridCLR 针对当前平台编出来的 TH1.Hotfix.dll。"));
|
$"{sourceMessage}\n这是 HybridCLR 针对当前平台编出来的 TH1.Hotfix.dll。"));
|
||||||
|
|
||||||
|
var expected = source;
|
||||||
|
var expectedOk = sourceOk;
|
||||||
|
var expectedLabel = "未混淆输出";
|
||||||
|
if (expectObfuscatedHotfix)
|
||||||
|
{
|
||||||
|
var obfuscatedOk = TH1HybridCLRBuildTools.IsUsableHotfixDll(obfuscated, out var obfuscatedMessage);
|
||||||
|
items.Add(new MigrationStatusItem(
|
||||||
|
"1.5 OPS 混淆后 DLL 输出",
|
||||||
|
obfuscatedOk ? MigrationStatusLevel.Ok : MigrationStatusLevel.Error,
|
||||||
|
$"{obfuscatedMessage}\n这是打包会优先拷贝的 TH1.Hotfix.dll。"));
|
||||||
|
|
||||||
|
expected = obfuscated;
|
||||||
|
expectedOk = obfuscatedOk;
|
||||||
|
expectedLabel = "混淆输出";
|
||||||
|
}
|
||||||
|
|
||||||
var streamingOk = TH1HybridCLRBuildTools.IsUsableHotfixDll(streaming, out var streamingMessage);
|
var streamingOk = TH1HybridCLRBuildTools.IsUsableHotfixDll(streaming, out var streamingMessage);
|
||||||
var streamingLevel = streamingOk ? MigrationStatusLevel.Ok : MigrationStatusLevel.Error;
|
var streamingLevel = streamingOk ? MigrationStatusLevel.Ok : MigrationStatusLevel.Error;
|
||||||
var streamingDetails = $"{streamingMessage}\n{streaming}";
|
var streamingDetails = $"{streamingMessage}\n{streaming}";
|
||||||
@ -345,15 +404,15 @@ namespace TH1_Logic.Editor
|
|||||||
streamingLevel = MigrationStatusLevel.Error;
|
streamingLevel = MigrationStatusLevel.Error;
|
||||||
streamingDetails += "\n该 DLL 疑似引用 UnityEditor,不能进 PC/iOS 包。请用面板重新构建目标平台热更 DLL。";
|
streamingDetails += "\n该 DLL 疑似引用 UnityEditor,不能进 PC/iOS 包。请用面板重新构建目标平台热更 DLL。";
|
||||||
}
|
}
|
||||||
else if (streamingOk && sourceOk)
|
else if (streamingOk && expectedOk)
|
||||||
{
|
{
|
||||||
var sourceInfo = new FileInfo(source);
|
var sourceInfo = new FileInfo(expected);
|
||||||
var streamingInfo = new FileInfo(streaming);
|
var streamingInfo = new FileInfo(streaming);
|
||||||
if (streamingInfo.LastWriteTimeUtc.AddSeconds(1) < sourceInfo.LastWriteTimeUtc ||
|
if (streamingInfo.LastWriteTimeUtc.AddSeconds(1) < sourceInfo.LastWriteTimeUtc ||
|
||||||
streamingInfo.Length != sourceInfo.Length)
|
streamingInfo.Length != sourceInfo.Length)
|
||||||
{
|
{
|
||||||
streamingLevel = MigrationStatusLevel.Error;
|
streamingLevel = MigrationStatusLevel.Error;
|
||||||
streamingDetails += "\n它和第 1 步的输出不一致,请重新执行大按钮。";
|
streamingDetails += $"\n它和{expectedLabel}不一致,请重新执行大按钮。";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using TH1_Logic.Editor.HybridCLR;
|
using TH1_Logic.Editor.HybridCLR;
|
||||||
@ -16,7 +17,32 @@ namespace TH1_Logic.Editor
|
|||||||
{
|
{
|
||||||
private const string BuildDirArg = "-th1SmokeBuildDir";
|
private const string BuildDirArg = "-th1SmokeBuildDir";
|
||||||
private const string DefaultBuildSubDirectory = "TH1/CodexSmoke";
|
private const string DefaultBuildSubDirectory = "TH1/CodexSmoke";
|
||||||
|
private const string ProductName = "TOHOTOPIA";
|
||||||
private const string ExeName = "TOHOTOPIA.exe";
|
private const string ExeName = "TOHOTOPIA.exe";
|
||||||
|
private static readonly string[] BaseSharedDefines =
|
||||||
|
{
|
||||||
|
"UNITY",
|
||||||
|
"ENABLE_VIEW",
|
||||||
|
"NODECANVAS"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static readonly string[] ControlledDefines =
|
||||||
|
{
|
||||||
|
"UNITY",
|
||||||
|
"ENABLE_VIEW",
|
||||||
|
"NODECANVAS",
|
||||||
|
"STEAMWORKS_NET",
|
||||||
|
"STEAM_CHANNEL",
|
||||||
|
"USE_INPUT",
|
||||||
|
"ENABLE_SPEEDUP",
|
||||||
|
"ENABLE_TRAIN",
|
||||||
|
"ENABLE_AIMODEL",
|
||||||
|
"GAME_AUTO_DEBUG",
|
||||||
|
"CHECK_ACTIONDEFFERENCE",
|
||||||
|
"STEAM_TEST",
|
||||||
|
"TH1_PLATFORM_PC",
|
||||||
|
"TH1_PLATFORM_IOS"
|
||||||
|
};
|
||||||
|
|
||||||
[MenuItem("Tools/TH1/iOS Migration/Command Line/Prepare And Build Windows Smoke")]
|
[MenuItem("Tools/TH1/iOS Migration/Command Line/Prepare And Build Windows Smoke")]
|
||||||
public static void PrepareAndBuildWindowsSmoke()
|
public static void PrepareAndBuildWindowsSmoke()
|
||||||
@ -31,6 +57,19 @@ namespace TH1_Logic.Editor
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[MenuItem("Tools/TH1/iOS Migration/Command Line/Build Windows Debug Hotfix Obfuscation Smoke")]
|
||||||
|
public static void BuildWindowsDebugHotfixObfuscationSmoke()
|
||||||
|
{
|
||||||
|
RunBatchAction(() =>
|
||||||
|
{
|
||||||
|
ConfigureWindowsIl2CppDebugHotfixObfuscationSettings();
|
||||||
|
PrepareWindowsDebugHotfixObfuscation();
|
||||||
|
|
||||||
|
var exePath = BuildWindowsSmokePlayer(true);
|
||||||
|
Debug.Log($"[TH1.Migration.CLI] Windows debug hotfix-obfuscation smoke build OK: {exePath}");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
[MenuItem("Tools/TH1/iOS Migration/Command Line/Prepare Current Platform")]
|
[MenuItem("Tools/TH1/iOS Migration/Command Line/Prepare Current Platform")]
|
||||||
public static void PrepareCurrentPlatformMenu()
|
public static void PrepareCurrentPlatformMenu()
|
||||||
{
|
{
|
||||||
@ -65,6 +104,93 @@ namespace TH1_Logic.Editor
|
|||||||
Debug.Log("[TH1.Migration.CLI] Prepare current platform OK.");
|
Debug.Log("[TH1.Migration.CLI] Prepare current platform OK.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void PrepareWindowsDebugHotfixObfuscation()
|
||||||
|
{
|
||||||
|
AssetDatabase.SaveAssets();
|
||||||
|
|
||||||
|
TH1HybridCLRBuildTools.ConfigureHotfixSettings();
|
||||||
|
TH1YooAssetBuildTools.ConfigureDefaultPackageCollector();
|
||||||
|
TH1HybridCLRBuildTools.SetOpsObfuscationEnabled(false);
|
||||||
|
TH1HybridCLRBuildTools.GenerateAll();
|
||||||
|
|
||||||
|
if (!TH1HybridCLRBuildTools.BuildAndCopyHotfixArtifacts(true, true))
|
||||||
|
{
|
||||||
|
throw new BuildFailedException("[TH1.Migration.CLI] Build obfuscated hotfix dll failed.");
|
||||||
|
}
|
||||||
|
|
||||||
|
TH1YooAssetBuildTools.BuildBuiltinDefaultPackage();
|
||||||
|
|
||||||
|
AssetDatabase.SaveAssets();
|
||||||
|
AssetDatabase.Refresh();
|
||||||
|
|
||||||
|
var blockers = TH1MigrationBuildStatus.GetBuildBlockingMessages(
|
||||||
|
EditorUserBuildSettings.activeBuildTarget,
|
||||||
|
true,
|
||||||
|
true);
|
||||||
|
if (blockers.Count > 0)
|
||||||
|
{
|
||||||
|
throw new BuildFailedException(
|
||||||
|
"[TH1.Migration.CLI] Debug hotfix-obfuscation preparation still has blocking errors:\n" +
|
||||||
|
string.Join("\n", blockers));
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Log("[TH1.Migration.CLI] Windows debug hotfix-obfuscation preparation OK.");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ConfigureWindowsIl2CppDebugHotfixObfuscationSettings()
|
||||||
|
{
|
||||||
|
const BuildTargetGroup group = BuildTargetGroup.Standalone;
|
||||||
|
const BuildTarget target = BuildTarget.StandaloneWindows64;
|
||||||
|
|
||||||
|
if (EditorUserBuildSettings.activeBuildTarget != target)
|
||||||
|
{
|
||||||
|
EditorUserBuildSettings.SwitchActiveBuildTarget(group, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
SetWindowsDebugDefines();
|
||||||
|
PlayerSettings.productName = ProductName;
|
||||||
|
PlayerSettings.SetScriptingBackend(group, ScriptingImplementation.IL2CPP);
|
||||||
|
EditorUserBuildSettings.development = true;
|
||||||
|
EditorUserBuildSettings.allowDebugging = true;
|
||||||
|
PlayerSettings.usePlayerLog = true;
|
||||||
|
PlayerSettings.enableInternalProfiler = true;
|
||||||
|
PlayerSettings.SetStackTraceLogType(LogType.Log, StackTraceLogType.ScriptOnly);
|
||||||
|
PlayerSettings.SetStackTraceLogType(LogType.Warning, StackTraceLogType.ScriptOnly);
|
||||||
|
PlayerSettings.SetStackTraceLogType(LogType.Error, StackTraceLogType.ScriptOnly);
|
||||||
|
PlayerSettings.SetStackTraceLogType(LogType.Assert, StackTraceLogType.ScriptOnly);
|
||||||
|
PlayerSettings.SetStackTraceLogType(LogType.Exception, StackTraceLogType.ScriptOnly);
|
||||||
|
|
||||||
|
Debug.Log("[TH1.Migration.CLI] Configured Windows IL2CPP debug hotfix-obfuscation build settings.");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void SetWindowsDebugDefines()
|
||||||
|
{
|
||||||
|
const BuildTargetGroup group = BuildTargetGroup.Standalone;
|
||||||
|
var defines = new HashSet<string>(
|
||||||
|
PlayerSettings.GetScriptingDefineSymbolsForGroup(group)
|
||||||
|
.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
|
||||||
|
.Select(symbol => symbol.Trim())
|
||||||
|
.Where(symbol => !string.IsNullOrEmpty(symbol)),
|
||||||
|
StringComparer.Ordinal);
|
||||||
|
|
||||||
|
foreach (var symbol in ControlledDefines)
|
||||||
|
{
|
||||||
|
defines.Remove(symbol);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var symbol in BaseSharedDefines)
|
||||||
|
{
|
||||||
|
defines.Add(symbol);
|
||||||
|
}
|
||||||
|
|
||||||
|
defines.Add("TH1_PLATFORM_PC");
|
||||||
|
defines.Add("STEAMWORKS_NET");
|
||||||
|
defines.Add("STEAM_CHANNEL");
|
||||||
|
defines.Add("USE_INPUT");
|
||||||
|
|
||||||
|
PlayerSettings.SetScriptingDefineSymbolsForGroup(group, string.Join(";", defines.OrderBy(symbol => symbol)));
|
||||||
|
}
|
||||||
|
|
||||||
private static void ConfigureWindowsIl2CppSmokeSettings()
|
private static void ConfigureWindowsIl2CppSmokeSettings()
|
||||||
{
|
{
|
||||||
const BuildTargetGroup group = BuildTargetGroup.Standalone;
|
const BuildTargetGroup group = BuildTargetGroup.Standalone;
|
||||||
@ -88,7 +214,7 @@ namespace TH1_Logic.Editor
|
|||||||
Debug.Log("[TH1.Migration.CLI] Configured Windows IL2CPP smoke build settings.");
|
Debug.Log("[TH1.Migration.CLI] Configured Windows IL2CPP smoke build settings.");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string BuildWindowsSmokePlayer()
|
private static string BuildWindowsSmokePlayer(bool validateDebugHotfixObfuscation = false)
|
||||||
{
|
{
|
||||||
var outputRoot = GetSmokeBuildDirectory();
|
var outputRoot = GetSmokeBuildDirectory();
|
||||||
CleanSmokeBuildDirectory(outputRoot);
|
CleanSmokeBuildDirectory(outputRoot);
|
||||||
@ -110,10 +236,14 @@ namespace TH1_Logic.Editor
|
|||||||
locationPathName = outputExe,
|
locationPathName = outputExe,
|
||||||
target = BuildTarget.StandaloneWindows64,
|
target = BuildTarget.StandaloneWindows64,
|
||||||
targetGroup = BuildTargetGroup.Standalone,
|
targetGroup = BuildTargetGroup.Standalone,
|
||||||
options = BuildOptions.Development
|
options = BuildOptions.Development | BuildOptions.AllowDebugging
|
||||||
};
|
};
|
||||||
|
|
||||||
var report = BuildPipeline.BuildPlayer(options);
|
BuildReport report;
|
||||||
|
using (TH1MigrationBuildValidationGate.Suppress())
|
||||||
|
{
|
||||||
|
report = BuildPipeline.BuildPlayer(options);
|
||||||
|
}
|
||||||
var summary = report.summary;
|
var summary = report.summary;
|
||||||
if (summary.result != BuildResult.Succeeded)
|
if (summary.result != BuildResult.Succeeded)
|
||||||
{
|
{
|
||||||
@ -134,9 +264,46 @@ namespace TH1_Logic.Editor
|
|||||||
$"[TH1.Migration.CLI] Build succeeded but no runnable player exe was found under {outputRoot}.");
|
$"[TH1.Migration.CLI] Build succeeded but no runnable player exe was found under {outputRoot}.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (validateDebugHotfixObfuscation)
|
||||||
|
{
|
||||||
|
ValidateIl2CppDebugHotfixObfuscationOutput(outputRoot, playerExe);
|
||||||
|
}
|
||||||
|
|
||||||
return playerExe;
|
return playerExe;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void ValidateIl2CppDebugHotfixObfuscationOutput(string outputRoot, string playerExe)
|
||||||
|
{
|
||||||
|
var gameAssembly = Directory.GetFiles(outputRoot, "GameAssembly.dll", SearchOption.AllDirectories)
|
||||||
|
.FirstOrDefault();
|
||||||
|
if (string.IsNullOrEmpty(gameAssembly))
|
||||||
|
{
|
||||||
|
throw new BuildFailedException(
|
||||||
|
$"[TH1.Migration.CLI] Windows Debug hotfix-obfuscation build must use IL2CPP, but GameAssembly.dll was not found under {outputRoot}.");
|
||||||
|
}
|
||||||
|
|
||||||
|
var playerName = Path.GetFileNameWithoutExtension(playerExe);
|
||||||
|
var dataDirectory = Path.Combine(Path.GetDirectoryName(playerExe) ?? outputRoot, playerName + "_Data");
|
||||||
|
var managedDirectory = Path.Combine(dataDirectory, "Managed");
|
||||||
|
var embeddedHotfixDll = Path.Combine(managedDirectory, "TH1.Hotfix.dll");
|
||||||
|
if (File.Exists(embeddedHotfixDll))
|
||||||
|
{
|
||||||
|
throw new BuildFailedException(
|
||||||
|
$"[TH1.Migration.CLI] TH1.Hotfix.dll should not be embedded in IL2CPP player Managed directory: {embeddedHotfixDll}");
|
||||||
|
}
|
||||||
|
|
||||||
|
var streamingHotfixDll = Directory
|
||||||
|
.GetFiles(dataDirectory, "TH1.Hotfix.dll.bytes", SearchOption.AllDirectories)
|
||||||
|
.FirstOrDefault(path => path.IndexOf("HybridCLR", StringComparison.OrdinalIgnoreCase) >= 0);
|
||||||
|
if (string.IsNullOrEmpty(streamingHotfixDll))
|
||||||
|
{
|
||||||
|
throw new BuildFailedException(
|
||||||
|
$"[TH1.Migration.CLI] Obfuscated hotfix dll bytes were not copied into player StreamingAssets under {dataDirectory}.");
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Log($"[TH1.Migration.CLI] Windows IL2CPP debug hotfix-obfuscation output verified: gameAssembly={gameAssembly}, streaming={streamingHotfixDll}");
|
||||||
|
}
|
||||||
|
|
||||||
private static string GetSmokeBuildDirectory()
|
private static string GetSmokeBuildDirectory()
|
||||||
{
|
{
|
||||||
var argValue = GetCommandLineValue(BuildDirArg);
|
var argValue = GetCommandLineValue(BuildDirArg);
|
||||||
|
|||||||
@ -19,6 +19,7 @@ namespace TH1_Logic.Editor
|
|||||||
private const string OpsObfuscatorSettingsPath = "Assets/OPS/Obfuscator/Settings/Obfuscator_Settings.json";
|
private const string OpsObfuscatorSettingsPath = "Assets/OPS/Obfuscator/Settings/Obfuscator_Settings.json";
|
||||||
private const string ProductName = "TOHOTOPIA";
|
private const string ProductName = "TOHOTOPIA";
|
||||||
private const string ExeName = "TOHOTOPIA.exe";
|
private const string ExeName = "TOHOTOPIA.exe";
|
||||||
|
private const string DebugOpsObfuscationEditorPrefsKey = "TH1.UnifiedBuild.DebugOpsObfuscation";
|
||||||
private const string OpsObfuscationEnabledLabel = "开启";
|
private const string OpsObfuscationEnabledLabel = "开启";
|
||||||
private const string OpsObfuscationDisabledLabel = "关闭";
|
private const string OpsObfuscationDisabledLabel = "关闭";
|
||||||
private static readonly Regex OpsObfuscationRegex = new Regex(
|
private static readonly Regex OpsObfuscationRegex = new Regex(
|
||||||
@ -58,11 +59,12 @@ namespace TH1_Logic.Editor
|
|||||||
private uint _patch;
|
private uint _patch;
|
||||||
private uint _fourth;
|
private uint _fourth;
|
||||||
private BuildPlatformProfile _platform = BuildPlatformProfile.PC;
|
private BuildPlatformProfile _platform = BuildPlatformProfile.PC;
|
||||||
private PackageProfile _package = PackageProfile.Debug;
|
private PackageProfile _package = PackageProfile.Release;
|
||||||
private bool _prepareBeforeBuild = true;
|
private bool _prepareBeforeBuild = true;
|
||||||
private bool _buildPlayer = true;
|
private bool _buildPlayer = true;
|
||||||
private bool _cleanOutput;
|
private bool _cleanOutput = true;
|
||||||
private bool _runMultilingualExportImport = true;
|
private bool _runMultilingualExportImport = true;
|
||||||
|
private bool _buildYooAssetAb = true;
|
||||||
private bool _showAdvanced;
|
private bool _showAdvanced;
|
||||||
private bool _enableSpeedup;
|
private bool _enableSpeedup;
|
||||||
private bool _enableTrain;
|
private bool _enableTrain;
|
||||||
@ -70,6 +72,7 @@ namespace TH1_Logic.Editor
|
|||||||
private bool _gameAutoDebug;
|
private bool _gameAutoDebug;
|
||||||
private bool _checkActionDifference;
|
private bool _checkActionDifference;
|
||||||
private bool _steamTest;
|
private bool _steamTest;
|
||||||
|
private bool _obfuscateDebugPackage;
|
||||||
private bool _actionScheduled;
|
private bool _actionScheduled;
|
||||||
private string _lastAction = "Ready";
|
private string _lastAction = "Ready";
|
||||||
private string _stageDetail = string.Empty;
|
private string _stageDetail = string.Empty;
|
||||||
@ -88,6 +91,12 @@ namespace TH1_Logic.Editor
|
|||||||
private void OnEnable()
|
private void OnEnable()
|
||||||
{
|
{
|
||||||
LoadVersionConfig();
|
LoadVersionConfig();
|
||||||
|
_obfuscateDebugPackage = EditorPrefs.GetBool(DebugOpsObfuscationEditorPrefsKey, false);
|
||||||
|
_prepareBeforeBuild = true;
|
||||||
|
_buildPlayer = true;
|
||||||
|
_cleanOutput = true;
|
||||||
|
_runMultilingualExportImport = true;
|
||||||
|
_buildYooAssetAb = true;
|
||||||
ResetReleaseTogglesIfNeeded();
|
ResetReleaseTogglesIfNeeded();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,7 +128,7 @@ namespace TH1_Logic.Editor
|
|||||||
}
|
}
|
||||||
|
|
||||||
EditorGUILayout.HelpBox(
|
EditorGUILayout.HelpBox(
|
||||||
"流程:选版本 -> 选平台 -> 选 Debug/Release -> 勾特殊功能 -> 一键执行。Debug 包会关闭 OPS 混淆;Release 包会关闭特殊功能宏并开启 OPS 混淆;iOS 配置不会写入 STEAM_CHANNEL/STEAMWORKS_NET。",
|
"流程:选版本 -> 选平台 -> 选 Debug/Release -> 勾特殊功能 -> 一键执行。Debug 包默认携带未混淆 Hotfix DLL,可手动勾选混淆;Release 包会关闭特殊功能宏并携带混淆 Hotfix DLL;iOS 配置不会写入 STEAM_CHANNEL/STEAMWORKS_NET。",
|
||||||
MessageType.Info);
|
MessageType.Info);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,11 +200,13 @@ namespace TH1_Logic.Editor
|
|||||||
_cleanOutput = EditorGUILayout.ToggleLeft("构建前清空本次输出目录", _cleanOutput);
|
_cleanOutput = EditorGUILayout.ToggleLeft("构建前清空本次输出目录", _cleanOutput);
|
||||||
EditorGUILayout.HelpBox("建议多语言导表/导回后再打包。勾选后,一键流程会先执行多语言导出导回,把 DataAssets 同步到 Export,再继续构建 AB 和 Player。", MessageType.Warning);
|
EditorGUILayout.HelpBox("建议多语言导表/导回后再打包。勾选后,一键流程会先执行多语言导出导回,把 DataAssets 同步到 Export,再继续构建 AB 和 Player。", MessageType.Warning);
|
||||||
_runMultilingualExportImport = EditorGUILayout.ToggleLeft("一键流程中执行多语言导出导回(DataAssets -> Export)", _runMultilingualExportImport);
|
_runMultilingualExportImport = EditorGUILayout.ToggleLeft("一键流程中执行多语言导出导回(DataAssets -> Export)", _runMultilingualExportImport);
|
||||||
|
DrawYooAssetBuildOption();
|
||||||
|
DrawDebugObfuscationOption();
|
||||||
|
|
||||||
var group = GetBuildTargetGroup(_platform);
|
var group = GetBuildTargetGroup(_platform);
|
||||||
EditorGUILayout.LabelField("目标平台组", group.ToString());
|
EditorGUILayout.LabelField("目标平台组", group.ToString());
|
||||||
EditorGUILayout.LabelField("目标 BuildTarget", GetBuildTarget(_platform).ToString());
|
EditorGUILayout.LabelField("目标 BuildTarget", GetBuildTarget(_platform).ToString());
|
||||||
EditorGUILayout.LabelField("脚本后端", GetScriptingBackend(_platform, _package).ToString());
|
EditorGUILayout.LabelField("脚本后端", GetSelectedScriptingBackend().ToString());
|
||||||
EditorGUILayout.LabelField("输出目录", GetOutputPathPreview());
|
EditorGUILayout.LabelField("输出目录", GetOutputPathPreview());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,12 +226,51 @@ namespace TH1_Logic.Editor
|
|||||||
|
|
||||||
if (_package == PackageProfile.Release)
|
if (_package == PackageProfile.Release)
|
||||||
{
|
{
|
||||||
EditorGUILayout.HelpBox("发布包会强制关闭上面所有特殊功能宏,并在应用配置时开启 OPS 混淆。", MessageType.None);
|
EditorGUILayout.HelpBox("发布包会强制关闭上面所有特殊功能宏,并携带混淆后的 Hotfix DLL。", MessageType.None);
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawOpsObfuscationStatus();
|
DrawOpsObfuscationStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void DrawYooAssetBuildOption()
|
||||||
|
{
|
||||||
|
using (new EditorGUI.DisabledScope(!_prepareBeforeBuild))
|
||||||
|
{
|
||||||
|
var next = EditorGUILayout.ToggleLeft("准备流程中构建 YooAsset AB(资源没变可关闭)", _buildYooAssetAb);
|
||||||
|
if (next != _buildYooAssetAb)
|
||||||
|
{
|
||||||
|
_buildYooAssetAb = next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_prepareBeforeBuild && !_buildYooAssetAb)
|
||||||
|
{
|
||||||
|
var messageType = _runMultilingualExportImport ? MessageType.Warning : MessageType.None;
|
||||||
|
var message = _runMultilingualExportImport
|
||||||
|
? "当前会先执行多语言导出导回,但不会重构 AB;包内仍会使用旧 AB 里的资源。只在确认资源变化不影响本次测试时这样做。"
|
||||||
|
: "将跳过 YooAsset Collector 配置和内置 AB 构建;适合只测代码/Hotfix 混淆的 Debug 或 Release 包。";
|
||||||
|
EditorGUILayout.HelpBox(message, messageType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawDebugObfuscationOption()
|
||||||
|
{
|
||||||
|
if (_package == PackageProfile.Release)
|
||||||
|
{
|
||||||
|
EditorGUILayout.LabelField("Hotfix DLL 混淆", "Release 包固定开启");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var next = EditorGUILayout.ToggleLeft("Debug 包也混淆 Hotfix DLL(用于定位混淆后问题)", _obfuscateDebugPackage);
|
||||||
|
if (next == _obfuscateDebugPackage)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_obfuscateDebugPackage = next;
|
||||||
|
EditorPrefs.SetBool(DebugOpsObfuscationEditorPrefsKey, _obfuscateDebugPackage);
|
||||||
|
}
|
||||||
|
|
||||||
private void DrawActions()
|
private void DrawActions()
|
||||||
{
|
{
|
||||||
EditorGUILayout.LabelField("执行", EditorStyles.boldLabel);
|
EditorGUILayout.LabelField("执行", EditorStyles.boldLabel);
|
||||||
@ -280,10 +330,19 @@ namespace TH1_Logic.Editor
|
|||||||
{
|
{
|
||||||
ScheduleAction("Build Hotfix DLL", () =>
|
ScheduleAction("Build Hotfix DLL", () =>
|
||||||
{
|
{
|
||||||
if (!TH1HybridCLRBuildTools.BuildAndCopyHotfixArtifacts(IsDevelopmentBuild()))
|
if (!TH1HybridCLRBuildTools.BuildAndCopyHotfixArtifacts(IsDevelopmentBuild(), ShouldObfuscateHotfixDll()))
|
||||||
throw new Exception("Build hotfix dll failed. See Console for details.");
|
throw new Exception("Build hotfix dll failed. See Console for details.");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (GUILayout.Button("测试 Hotfix 混淆"))
|
||||||
|
{
|
||||||
|
ScheduleAction("Test Hotfix Obfuscation", () =>
|
||||||
|
{
|
||||||
|
if (!TH1HybridCLRBuildTools.BuildAndCopyHotfixArtifacts(IsDevelopmentBuild(), true))
|
||||||
|
throw new Exception("Test hotfix obfuscation failed. See Console for details.");
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
using (new EditorGUILayout.HorizontalScope())
|
using (new EditorGUILayout.HorizontalScope())
|
||||||
@ -301,7 +360,7 @@ namespace TH1_Logic.Editor
|
|||||||
|
|
||||||
using (new EditorGUILayout.HorizontalScope())
|
using (new EditorGUILayout.HorizontalScope())
|
||||||
{
|
{
|
||||||
if (GUILayout.Button("按当前包类型设置 OPS 混淆"))
|
if (GUILayout.Button("应用 Hotfix 混淆设置"))
|
||||||
{
|
{
|
||||||
ScheduleAction("Apply OPS Obfuscation", ApplyOpsObfuscationSettings);
|
ScheduleAction("Apply OPS Obfuscation", ApplyOpsObfuscationSettings);
|
||||||
}
|
}
|
||||||
@ -403,17 +462,33 @@ namespace TH1_Logic.Editor
|
|||||||
private void RunHybridClrAndYooAssetStages()
|
private void RunHybridClrAndYooAssetStages()
|
||||||
{
|
{
|
||||||
RunBuildStage("配置 HybridCLR", "刷新热更程序集、AOT 元数据和 HybridCLR 设置。", TH1HybridCLRBuildTools.ConfigureHotfixSettings);
|
RunBuildStage("配置 HybridCLR", "刷新热更程序集、AOT 元数据和 HybridCLR 设置。", TH1HybridCLRBuildTools.ConfigureHotfixSettings);
|
||||||
RunBuildStage("配置 YooAsset Collector", "确保 DefaultPackage 收集整个 Assets/BundleResources。", TH1YooAssetBuildTools.ConfigureDefaultPackageCollector);
|
if (_buildYooAssetAb)
|
||||||
RunBuildStage("HybridCLR Generate All", "生成 HybridCLR 必要代码和裁剪引用。", TH1HybridCLRBuildTools.GenerateAll);
|
|
||||||
RunBuildStage("构建 Hotfix DLL/AOT", "编译热更 DLL 并写入 StreamingAssets。", () =>
|
|
||||||
{
|
{
|
||||||
if (!TH1HybridCLRBuildTools.BuildAndCopyHotfixArtifacts(IsDevelopmentBuild()))
|
RunBuildStage("配置 YooAsset Collector", "确保 DefaultPackage 收集整个 Assets/BundleResources。", TH1YooAssetBuildTools.ConfigureDefaultPackageCollector);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SkipBuildStage("配置 YooAsset Collector", "已取消准备流程中构建 YooAsset AB。");
|
||||||
|
}
|
||||||
|
|
||||||
|
RunBuildStage("HybridCLR Generate All", "生成 HybridCLR 必要代码和裁剪引用。", TH1HybridCLRBuildTools.GenerateAll);
|
||||||
|
RunBuildStage("构建 Hotfix DLL/AOT", GetHotfixBuildStageDetail(), () =>
|
||||||
|
{
|
||||||
|
if (!TH1HybridCLRBuildTools.BuildAndCopyHotfixArtifacts(IsDevelopmentBuild(), ShouldObfuscateHotfixDll()))
|
||||||
{
|
{
|
||||||
throw new BuildFailedException("Build hotfix dll failed. See Console for details.");
|
throw new BuildFailedException("Build hotfix dll failed. See Console for details.");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
RunBuildStage("构建 YooAsset AB", "构建内置 DefaultPackage AssetBundle。", TH1YooAssetBuildTools.BuildBuiltinDefaultPackage);
|
if (_buildYooAssetAb)
|
||||||
RunBuildStage("检查构建阻断项", "确认热更 DLL、AOT Metadata、YooAsset Manifest 都已就绪。", CheckBuildBlockers);
|
{
|
||||||
|
RunBuildStage("构建 YooAsset AB", "构建内置 DefaultPackage AssetBundle。", TH1YooAssetBuildTools.BuildBuiltinDefaultPackage);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SkipBuildStage("构建 YooAsset AB", "已取消;沿用 StreamingAssets 中已有的 YooAsset AB。");
|
||||||
|
}
|
||||||
|
|
||||||
|
RunBuildStage("检查构建阻断项", GetBuildBlockerStageDetail(), CheckBuildBlockers);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SkipPrepareStages(string detail)
|
private void SkipPrepareStages(string detail)
|
||||||
@ -432,9 +507,26 @@ namespace TH1_Logic.Editor
|
|||||||
UpdateRunningStage("多语言导出导回", message, progress));
|
UpdateRunningStage("多语言导出导回", message, progress));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void CheckBuildBlockers()
|
private string GetHotfixBuildStageDetail()
|
||||||
{
|
{
|
||||||
var blockers = TH1MigrationBuildStatus.GetBuildBlockingMessages(EditorUserBuildSettings.activeBuildTarget);
|
return ShouldObfuscateHotfixDll()
|
||||||
|
? "编译热更 DLL,单独混淆 TH1.Hotfix.dll,并写入 StreamingAssets。"
|
||||||
|
: "编译热更 DLL 并写入 StreamingAssets。";
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetBuildBlockerStageDetail()
|
||||||
|
{
|
||||||
|
return _buildYooAssetAb
|
||||||
|
? "确认热更 DLL、AOT Metadata、YooAsset Manifest 都已就绪。"
|
||||||
|
: "确认热更 DLL、AOT Metadata 已就绪;YooAsset AB 按选项跳过检查。";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CheckBuildBlockers()
|
||||||
|
{
|
||||||
|
var blockers = TH1MigrationBuildStatus.GetBuildBlockingMessages(
|
||||||
|
EditorUserBuildSettings.activeBuildTarget,
|
||||||
|
ShouldObfuscateHotfixDll(),
|
||||||
|
_buildYooAssetAb);
|
||||||
if (blockers.Count == 0) return;
|
if (blockers.Count == 0) return;
|
||||||
|
|
||||||
throw new BuildFailedException(
|
throw new BuildFailedException(
|
||||||
@ -638,7 +730,7 @@ namespace TH1_Logic.Editor
|
|||||||
private void ApplyPlayerSettings()
|
private void ApplyPlayerSettings()
|
||||||
{
|
{
|
||||||
var group = GetBuildTargetGroup(_platform);
|
var group = GetBuildTargetGroup(_platform);
|
||||||
PlayerSettings.SetScriptingBackend(group, GetScriptingBackend(_platform, _package));
|
PlayerSettings.SetScriptingBackend(group, GetSelectedScriptingBackend());
|
||||||
EditorUserBuildSettings.development = IsDevelopmentBuild();
|
EditorUserBuildSettings.development = IsDevelopmentBuild();
|
||||||
EditorUserBuildSettings.allowDebugging = IsDevelopmentBuild();
|
EditorUserBuildSettings.allowDebugging = IsDevelopmentBuild();
|
||||||
PlayerSettings.usePlayerLog = IsDevelopmentBuild();
|
PlayerSettings.usePlayerLog = IsDevelopmentBuild();
|
||||||
@ -666,30 +758,44 @@ namespace TH1_Logic.Editor
|
|||||||
private void DrawOpsObfuscationStatus()
|
private void DrawOpsObfuscationStatus()
|
||||||
{
|
{
|
||||||
EditorGUILayout.Space(4);
|
EditorGUILayout.Space(4);
|
||||||
EditorGUILayout.LabelField("OPS 混淆", EditorStyles.boldLabel);
|
EditorGUILayout.LabelField("Hotfix DLL 混淆", EditorStyles.boldLabel);
|
||||||
var targetEnabled = ShouldEnableOpsObfuscation();
|
var targetEnabled = ShouldObfuscateHotfixDll();
|
||||||
EditorGUILayout.LabelField("当前包类型目标", targetEnabled ? $"Release 包:{OpsObfuscationEnabledLabel}" : $"Debug 包:{OpsObfuscationDisabledLabel}");
|
EditorGUILayout.LabelField("当前包类型目标", GetHotfixObfuscationTargetLabel(targetEnabled));
|
||||||
|
|
||||||
if (TryReadOpsObfuscationEnabled(out var currentEnabled))
|
if (TryReadOpsObfuscationEnabled(out var currentEnabled))
|
||||||
{
|
{
|
||||||
EditorGUILayout.LabelField("当前配置文件状态", currentEnabled ? OpsObfuscationEnabledLabel : OpsObfuscationDisabledLabel);
|
EditorGUILayout.LabelField("OPS 全局配置文件状态", currentEnabled ? OpsObfuscationEnabledLabel : OpsObfuscationDisabledLabel);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
EditorGUILayout.HelpBox($"无法读取 OPS 混淆状态:{OpsObfuscatorSettingsPath}", MessageType.Warning);
|
EditorGUILayout.HelpBox($"无法读取 OPS 混淆状态:{OpsObfuscatorSettingsPath}", MessageType.Warning);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EditorGUILayout.HelpBox("一键流程只在 Hotfix 阶段临时开启 OPS,全局配置会保持关闭,避免 Build Player 阶段也进入 OPS 钩子。", MessageType.None);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ApplyOpsObfuscationSettings()
|
private void ApplyOpsObfuscationSettings()
|
||||||
{
|
{
|
||||||
var enabled = ShouldEnableOpsObfuscation();
|
SetOpsObfuscationEnabled(false);
|
||||||
SetOpsObfuscationEnabled(enabled);
|
Debug.Log($"[TH1.UnifiedBuild] OPS player build hook disabled. Hotfix dll obfuscation {(ShouldObfuscateHotfixDll() ? "enabled" : "disabled")} for {_package} package.");
|
||||||
Debug.Log($"[TH1.UnifiedBuild] OPS obfuscation {(enabled ? "enabled" : "disabled")} for {_package} package.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool ShouldEnableOpsObfuscation()
|
private bool ShouldObfuscateHotfixDll()
|
||||||
{
|
{
|
||||||
return _package == PackageProfile.Release;
|
return _package == PackageProfile.Release ||
|
||||||
|
(_package == PackageProfile.Debug && _obfuscateDebugPackage);
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetHotfixObfuscationTargetLabel(bool enabled)
|
||||||
|
{
|
||||||
|
if (_package == PackageProfile.Release)
|
||||||
|
{
|
||||||
|
return $"Release 包:{OpsObfuscationEnabledLabel}";
|
||||||
|
}
|
||||||
|
|
||||||
|
return enabled
|
||||||
|
? $"Debug 包:{OpsObfuscationEnabledLabel}(调试混淆问题)"
|
||||||
|
: $"Debug 包:{OpsObfuscationDisabledLabel}";
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool TryReadOpsObfuscationEnabled(out bool enabled)
|
private static bool TryReadOpsObfuscationEnabled(out bool enabled)
|
||||||
@ -741,6 +847,8 @@ namespace TH1_Logic.Editor
|
|||||||
|
|
||||||
private void BuildPlayer()
|
private void BuildPlayer()
|
||||||
{
|
{
|
||||||
|
ValidateScriptingBackendBeforeBuild();
|
||||||
|
|
||||||
var outputPath = GetOutputPath();
|
var outputPath = GetOutputPath();
|
||||||
var outputDir = _platform == BuildPlatformProfile.iOS ? outputPath : Path.GetDirectoryName(outputPath);
|
var outputDir = _platform == BuildPlatformProfile.iOS ? outputPath : Path.GetDirectoryName(outputPath);
|
||||||
if (string.IsNullOrEmpty(outputDir)) throw new BuildFailedException("Invalid output path.");
|
if (string.IsNullOrEmpty(outputDir)) throw new BuildFailedException("Invalid output path.");
|
||||||
@ -785,6 +893,25 @@ namespace TH1_Logic.Editor
|
|||||||
}
|
}
|
||||||
|
|
||||||
Debug.Log($"[TH1.UnifiedBuild] Build succeeded: {outputPath}");
|
Debug.Log($"[TH1.UnifiedBuild] Build succeeded: {outputPath}");
|
||||||
|
if (!Application.isBatchMode)
|
||||||
|
{
|
||||||
|
EditorUtility.RevealInFinder(outputDir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ValidateScriptingBackendBeforeBuild()
|
||||||
|
{
|
||||||
|
var group = GetBuildTargetGroup(_platform);
|
||||||
|
var expected = GetSelectedScriptingBackend();
|
||||||
|
var actual = PlayerSettings.GetScriptingBackend(group);
|
||||||
|
if (actual == expected)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new BuildFailedException(
|
||||||
|
$"Scripting backend mismatch before Build Player. Platform={_platform}, Package={_package}, expected={expected}, actual={actual}. " +
|
||||||
|
"Run Apply Profile again before building.");
|
||||||
}
|
}
|
||||||
|
|
||||||
private BuildOptions GetBuildOptions()
|
private BuildOptions GetBuildOptions()
|
||||||
@ -835,10 +962,11 @@ namespace TH1_Logic.Editor
|
|||||||
return platform == BuildPlatformProfile.iOS ? BuildTargetGroup.iOS : BuildTargetGroup.Standalone;
|
return platform == BuildPlatformProfile.iOS ? BuildTargetGroup.iOS : BuildTargetGroup.Standalone;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ScriptingImplementation GetScriptingBackend(BuildPlatformProfile platform, PackageProfile package)
|
private ScriptingImplementation GetSelectedScriptingBackend()
|
||||||
{
|
{
|
||||||
if (platform == BuildPlatformProfile.iOS) return ScriptingImplementation.IL2CPP;
|
if (_platform == BuildPlatformProfile.iOS) return ScriptingImplementation.IL2CPP;
|
||||||
return package == PackageProfile.Release ? ScriptingImplementation.IL2CPP : ScriptingImplementation.Mono2x;
|
if (_package == PackageProfile.Release) return ScriptingImplementation.IL2CPP;
|
||||||
|
return ShouldObfuscateHotfixDll() ? ScriptingImplementation.IL2CPP : ScriptingImplementation.Mono2x;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool IsDevelopmentBuild()
|
private bool IsDevelopmentBuild()
|
||||||
|
|||||||
@ -34,11 +34,11 @@
|
|||||||
"url": "https://package.openupm.com"
|
"url": "https://package.openupm.com"
|
||||||
},
|
},
|
||||||
"com.unity.2d.animation": {
|
"com.unity.2d.animation": {
|
||||||
"version": "9.1.3",
|
"version": "9.0.3",
|
||||||
"depth": 1,
|
"depth": 1,
|
||||||
"source": "registry",
|
"source": "registry",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"com.unity.2d.common": "8.0.4",
|
"com.unity.2d.common": "8.0.1",
|
||||||
"com.unity.2d.sprite": "1.0.0",
|
"com.unity.2d.sprite": "1.0.0",
|
||||||
"com.unity.collections": "1.1.0",
|
"com.unity.collections": "1.1.0",
|
||||||
"com.unity.modules.animation": "1.0.0",
|
"com.unity.modules.animation": "1.0.0",
|
||||||
@ -47,7 +47,7 @@
|
|||||||
"url": "https://packages.unity.com"
|
"url": "https://packages.unity.com"
|
||||||
},
|
},
|
||||||
"com.unity.2d.aseprite": {
|
"com.unity.2d.aseprite": {
|
||||||
"version": "1.1.6",
|
"version": "1.0.0",
|
||||||
"depth": 1,
|
"depth": 1,
|
||||||
"source": "registry",
|
"source": "registry",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -59,7 +59,7 @@
|
|||||||
"url": "https://packages.unity.com"
|
"url": "https://packages.unity.com"
|
||||||
},
|
},
|
||||||
"com.unity.2d.common": {
|
"com.unity.2d.common": {
|
||||||
"version": "8.0.4",
|
"version": "8.0.1",
|
||||||
"depth": 2,
|
"depth": 2,
|
||||||
"source": "registry",
|
"source": "registry",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -79,13 +79,13 @@
|
|||||||
"url": "https://packages.unity.com"
|
"url": "https://packages.unity.com"
|
||||||
},
|
},
|
||||||
"com.unity.2d.psdimporter": {
|
"com.unity.2d.psdimporter": {
|
||||||
"version": "8.0.5",
|
"version": "8.0.2",
|
||||||
"depth": 1,
|
"depth": 1,
|
||||||
"source": "registry",
|
"source": "registry",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"com.unity.2d.common": "8.0.2",
|
"com.unity.2d.common": "8.0.1",
|
||||||
"com.unity.2d.sprite": "1.0.0",
|
"com.unity.2d.sprite": "1.0.0",
|
||||||
"com.unity.2d.animation": "9.1.1"
|
"com.unity.2d.animation": "9.0.1"
|
||||||
},
|
},
|
||||||
"url": "https://packages.unity.com"
|
"url": "https://packages.unity.com"
|
||||||
},
|
},
|
||||||
@ -96,11 +96,11 @@
|
|||||||
"dependencies": {}
|
"dependencies": {}
|
||||||
},
|
},
|
||||||
"com.unity.2d.spriteshape": {
|
"com.unity.2d.spriteshape": {
|
||||||
"version": "9.0.5",
|
"version": "9.0.2",
|
||||||
"depth": 1,
|
"depth": 1,
|
||||||
"source": "registry",
|
"source": "registry",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"com.unity.2d.common": "8.0.4",
|
"com.unity.2d.common": "8.0.1",
|
||||||
"com.unity.mathematics": "1.1.0",
|
"com.unity.mathematics": "1.1.0",
|
||||||
"com.unity.modules.physics2d": "1.0.0"
|
"com.unity.modules.physics2d": "1.0.0"
|
||||||
},
|
},
|
||||||
@ -116,7 +116,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"com.unity.2d.tilemap.extras": {
|
"com.unity.2d.tilemap.extras": {
|
||||||
"version": "3.1.3",
|
"version": "3.1.1",
|
||||||
"depth": 1,
|
"depth": 1,
|
||||||
"source": "registry",
|
"source": "registry",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -128,12 +128,11 @@
|
|||||||
"url": "https://packages.unity.com"
|
"url": "https://packages.unity.com"
|
||||||
},
|
},
|
||||||
"com.unity.burst": {
|
"com.unity.burst": {
|
||||||
"version": "1.8.18",
|
"version": "1.8.8",
|
||||||
"depth": 1,
|
"depth": 1,
|
||||||
"source": "registry",
|
"source": "registry",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"com.unity.mathematics": "1.2.1",
|
"com.unity.mathematics": "1.2.1"
|
||||||
"com.unity.modules.jsonserialize": "1.0.0"
|
|
||||||
},
|
},
|
||||||
"url": "https://packages.unity.com"
|
"url": "https://packages.unity.com"
|
||||||
},
|
},
|
||||||
@ -166,14 +165,14 @@
|
|||||||
"depth": 0,
|
"depth": 0,
|
||||||
"source": "builtin",
|
"source": "builtin",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"com.unity.2d.animation": "9.1.3",
|
"com.unity.2d.animation": "9.0.3",
|
||||||
"com.unity.2d.pixel-perfect": "5.0.3",
|
"com.unity.2d.pixel-perfect": "5.0.3",
|
||||||
"com.unity.2d.psdimporter": "8.0.5",
|
"com.unity.2d.psdimporter": "8.0.2",
|
||||||
"com.unity.2d.sprite": "1.0.0",
|
"com.unity.2d.sprite": "1.0.0",
|
||||||
"com.unity.2d.spriteshape": "9.0.5",
|
"com.unity.2d.spriteshape": "9.0.2",
|
||||||
"com.unity.2d.tilemap": "1.0.0",
|
"com.unity.2d.tilemap": "1.0.0",
|
||||||
"com.unity.2d.tilemap.extras": "3.1.3",
|
"com.unity.2d.tilemap.extras": "3.1.1",
|
||||||
"com.unity.2d.aseprite": "1.1.6"
|
"com.unity.2d.aseprite": "1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"com.unity.ide.rider": {
|
"com.unity.ide.rider": {
|
||||||
@ -202,7 +201,7 @@
|
|||||||
"url": "https://packages.unity.com"
|
"url": "https://packages.unity.com"
|
||||||
},
|
},
|
||||||
"com.unity.render-pipelines.core": {
|
"com.unity.render-pipelines.core": {
|
||||||
"version": "14.0.11",
|
"version": "14.0.8",
|
||||||
"depth": 1,
|
"depth": 1,
|
||||||
"source": "builtin",
|
"source": "builtin",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -218,22 +217,13 @@
|
|||||||
"source": "builtin",
|
"source": "builtin",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"com.unity.mathematics": "1.2.1",
|
"com.unity.mathematics": "1.2.1",
|
||||||
"com.unity.burst": "1.8.9",
|
"com.unity.burst": "1.8.4",
|
||||||
"com.unity.render-pipelines.core": "14.0.11",
|
"com.unity.render-pipelines.core": "14.0.8",
|
||||||
"com.unity.shadergraph": "14.0.11",
|
"com.unity.shadergraph": "14.0.8"
|
||||||
"com.unity.render-pipelines.universal-config": "14.0.9"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"com.unity.render-pipelines.universal-config": {
|
|
||||||
"version": "14.0.10",
|
|
||||||
"depth": 1,
|
|
||||||
"source": "builtin",
|
|
||||||
"dependencies": {
|
|
||||||
"com.unity.render-pipelines.core": "14.0.10"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"com.unity.scriptablebuildpipeline": {
|
"com.unity.scriptablebuildpipeline": {
|
||||||
"version": "1.21.25",
|
"version": "1.21.21",
|
||||||
"depth": 1,
|
"depth": 1,
|
||||||
"source": "registry",
|
"source": "registry",
|
||||||
"dependencies": {},
|
"dependencies": {},
|
||||||
@ -247,11 +237,11 @@
|
|||||||
"url": "https://packages.unity.com"
|
"url": "https://packages.unity.com"
|
||||||
},
|
},
|
||||||
"com.unity.shadergraph": {
|
"com.unity.shadergraph": {
|
||||||
"version": "14.0.11",
|
"version": "14.0.8",
|
||||||
"depth": 1,
|
"depth": 1,
|
||||||
"source": "builtin",
|
"source": "builtin",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"com.unity.render-pipelines.core": "14.0.11",
|
"com.unity.render-pipelines.core": "14.0.8",
|
||||||
"com.unity.searcher": "4.9.2"
|
"com.unity.searcher": "4.9.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -13,7 +13,7 @@ PlayerSettings:
|
|||||||
useOnDemandResources: 0
|
useOnDemandResources: 0
|
||||||
accelerometerFrequency: 60
|
accelerometerFrequency: 60
|
||||||
companyName: Remilia Command
|
companyName: Remilia Command
|
||||||
productName: TOHOTOPIA
|
productName: TOHOTOPIA v0.7.3f
|
||||||
defaultCursor: {fileID: 0}
|
defaultCursor: {fileID: 0}
|
||||||
cursorHotspot: {x: 0, y: 0}
|
cursorHotspot: {x: 0, y: 0}
|
||||||
m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
|
m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
|
||||||
@ -48,7 +48,6 @@ PlayerSettings:
|
|||||||
defaultScreenHeightWeb: 600
|
defaultScreenHeightWeb: 600
|
||||||
m_StereoRenderingPath: 0
|
m_StereoRenderingPath: 0
|
||||||
m_ActiveColorSpace: 1
|
m_ActiveColorSpace: 1
|
||||||
unsupportedMSAAFallback: 0
|
|
||||||
m_SpriteBatchVertexThreshold: 300
|
m_SpriteBatchVertexThreshold: 300
|
||||||
m_MTRendering: 1
|
m_MTRendering: 1
|
||||||
mipStripping: 0
|
mipStripping: 0
|
||||||
@ -76,7 +75,6 @@ PlayerSettings:
|
|||||||
androidMinimumWindowWidth: 400
|
androidMinimumWindowWidth: 400
|
||||||
androidMinimumWindowHeight: 300
|
androidMinimumWindowHeight: 300
|
||||||
androidFullscreenMode: 1
|
androidFullscreenMode: 1
|
||||||
androidAutoRotationBehavior: 1
|
|
||||||
defaultIsNativeResolution: 0
|
defaultIsNativeResolution: 0
|
||||||
macRetinaSupport: 1
|
macRetinaSupport: 1
|
||||||
runInBackground: 0
|
runInBackground: 0
|
||||||
@ -84,7 +82,6 @@ PlayerSettings:
|
|||||||
muteOtherAudioSources: 0
|
muteOtherAudioSources: 0
|
||||||
Prepare IOS For Recording: 0
|
Prepare IOS For Recording: 0
|
||||||
Force IOS Speakers When Recording: 0
|
Force IOS Speakers When Recording: 0
|
||||||
audioSpatialExperience: 0
|
|
||||||
deferSystemGesturesMode: 0
|
deferSystemGesturesMode: 0
|
||||||
hideHomeButton: 0
|
hideHomeButton: 0
|
||||||
submitAnalytics: 1
|
submitAnalytics: 1
|
||||||
@ -138,8 +135,6 @@ PlayerSettings:
|
|||||||
vulkanEnableLateAcquireNextImage: 0
|
vulkanEnableLateAcquireNextImage: 0
|
||||||
vulkanEnableCommandBufferRecycling: 1
|
vulkanEnableCommandBufferRecycling: 1
|
||||||
loadStoreDebugModeEnabled: 0
|
loadStoreDebugModeEnabled: 0
|
||||||
visionOSBundleVersion: 1.0
|
|
||||||
tvOSBundleVersion: 1.0
|
|
||||||
bundleVersion: 0.7.3f
|
bundleVersion: 0.7.3f
|
||||||
preloadedAssets: []
|
preloadedAssets: []
|
||||||
metroInputSource: 0
|
metroInputSource: 0
|
||||||
@ -152,7 +147,6 @@ PlayerSettings:
|
|||||||
isWsaHolographicRemotingEnabled: 0
|
isWsaHolographicRemotingEnabled: 0
|
||||||
enableFrameTimingStats: 0
|
enableFrameTimingStats: 0
|
||||||
enableOpenGLProfilerGPURecorders: 1
|
enableOpenGLProfilerGPURecorders: 1
|
||||||
allowHDRDisplaySupport: 0
|
|
||||||
useHDRDisplay: 0
|
useHDRDisplay: 0
|
||||||
hdrBitDepth: 0
|
hdrBitDepth: 0
|
||||||
m_ColorGamuts: 00000000
|
m_ColorGamuts: 00000000
|
||||||
@ -234,7 +228,6 @@ PlayerSettings:
|
|||||||
iOSMetalForceHardShadows: 0
|
iOSMetalForceHardShadows: 0
|
||||||
metalEditorSupport: 1
|
metalEditorSupport: 1
|
||||||
metalAPIValidation: 1
|
metalAPIValidation: 1
|
||||||
metalCompileShaderBinary: 0
|
|
||||||
iOSRenderExtraFrameOnPause: 0
|
iOSRenderExtraFrameOnPause: 0
|
||||||
iosCopyPluginsCodeInsteadOfSymlink: 0
|
iosCopyPluginsCodeInsteadOfSymlink: 0
|
||||||
appleDeveloperTeamID:
|
appleDeveloperTeamID:
|
||||||
@ -462,7 +455,7 @@ PlayerSettings:
|
|||||||
switchSocketConcurrencyLimit: 14
|
switchSocketConcurrencyLimit: 14
|
||||||
switchScreenResolutionBehavior: 2
|
switchScreenResolutionBehavior: 2
|
||||||
switchUseCPUProfiler: 0
|
switchUseCPUProfiler: 0
|
||||||
switchEnableFileSystemTrace: 0
|
switchUseGOLDLinker: 0
|
||||||
switchLTOSetting: 0
|
switchLTOSetting: 0
|
||||||
switchApplicationID: 0x01004b9000490000
|
switchApplicationID: 0x01004b9000490000
|
||||||
switchNSODependencies:
|
switchNSODependencies:
|
||||||
@ -592,6 +585,7 @@ PlayerSettings:
|
|||||||
switchSocketBufferEfficiency: 4
|
switchSocketBufferEfficiency: 4
|
||||||
switchSocketInitializeEnabled: 1
|
switchSocketInitializeEnabled: 1
|
||||||
switchNetworkInterfaceManagerInitializeEnabled: 1
|
switchNetworkInterfaceManagerInitializeEnabled: 1
|
||||||
|
switchPlayerConnectionEnabled: 1
|
||||||
switchUseNewStyleFilepaths: 0
|
switchUseNewStyleFilepaths: 0
|
||||||
switchUseLegacyFmodPriorities: 0
|
switchUseLegacyFmodPriorities: 0
|
||||||
switchUseMicroSleepForYield: 1
|
switchUseMicroSleepForYield: 1
|
||||||
@ -756,7 +750,6 @@ PlayerSettings:
|
|||||||
metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0}
|
metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0}
|
||||||
metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1}
|
metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1}
|
||||||
metroSplashScreenUseBackgroundColor: 0
|
metroSplashScreenUseBackgroundColor: 0
|
||||||
syncCapabilities: 0
|
|
||||||
platformCapabilities: {}
|
platformCapabilities: {}
|
||||||
metroTargetDeviceFamilies: {}
|
metroTargetDeviceFamilies: {}
|
||||||
metroFTAName:
|
metroFTAName:
|
||||||
|
|||||||
@ -1,2 +1,2 @@
|
|||||||
m_EditorVersion: 2022.3.53f1c1
|
m_EditorVersion: 2022.3.8f1c1
|
||||||
m_EditorVersionWithRevision: 2022.3.53f1c1 (f16e16b78e06)
|
m_EditorVersionWithRevision: 2022.3.8f1c1 (4ec8ee1b2212)
|
||||||
|
|||||||
677
Unity/Unity.sln
677
Unity/Unity.sln
@ -1,102 +1,623 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||||
# Visual Studio 15
|
# Visual Studio 2010
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NodeCanvas", "NodeCanvas.csproj", "{504AB00F-3D3F-909B-15CB-381039DF1EC2}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NodeCanvas", "NodeCanvas.csproj", "{0fb04a50-3f3d-9b90-15cb-381039df1ec2}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TH1.Hotfix", "TH1.Hotfix.csproj", "{73D282A7-CB2D-EF29-AED6-2182E01638A7}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TH1.Hotfix", "TH1.Hotfix.csproj", "{a782d273-2dcb-29ef-aed6-2182e01638a7}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParadoxNotion", "ParadoxNotion.csproj", "{6E3594B9-F350-38E8-E051-007A051E45C9}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Timeline", "Unity.Timeline.csproj", "{63b491c9-db19-5561-f15e-1c9ea0e3c9f0}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Animancer.FSM", "Animancer.FSM.csproj", "{B6514B77-01B9-7EB9-D593-35721140FEA6}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.ShaderGraph.Editor", "Unity.ShaderGraph.Editor.csproj", "{8fde539b-b477-26b5-0f99-c769ace654db}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrashSight.Runtime", "CrashSight.Runtime.csproj", "{D79D413D-5E6A-92EE-DA4A-BE15F62A50F3}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParadoxNotion", "ParadoxNotion.csproj", "{b994356e-50f3-e838-e051-007a051e45c9}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "com.rlabrecque.steamworks.net", "com.rlabrecque.steamworks.net.csproj", "{45C54A48-C87A-0FED-7146-E9C97C82AFBD}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Aseprite.Editor", "Unity.2D.Aseprite.Editor.csproj", "{8e089428-a193-2945-36a1-b1f8757c4203}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TH1.Logic.Editor", "TH1.Logic.Editor.csproj", "{47654AF1-44B2-0F19-E6E7-C324B11BCD21}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.VisualScripting.Flow", "Unity.VisualScripting.Flow.csproj", "{f4cf6b1d-2314-3cd4-2919-94501cec3479}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OPS.Obfuscator", "OPS.Obfuscator.csproj", "{C47EB37A-BDEF-7F7F-DA88-EFA56365689D}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipelines.Universal.Runtime", "Unity.RenderPipelines.Universal.Runtime.csproj", "{c678c602-0a4a-3246-5b09-5b414fc0d5de}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Animancer", "Animancer.csproj", "{F6659E15-63D3-6D1A-EC57-6DB30DA1B98F}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnityEditor.UI", "UnityEditor.UI.csproj", "{74e1c5c0-7c72-fa9f-cd43-b55bdef754da}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Animancer.Examples", "Animancer.Examples.csproj", "{76FC8738-B016-5BE2-D964-8C25CC3023A6}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Timeline.Editor", "Unity.Timeline.Editor.csproj", "{4f63daae-f5cd-01d3-9fa4-bd9bc22dc82d}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp-Editor", "Assembly-CSharp-Editor.csproj", "{6311E6C6-0A20-383B-320B-694068DE37A5}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.PlasticSCM.Editor", "Unity.PlasticSCM.Editor.csproj", "{9f94db9c-5882-04d7-c896-b8fd99196c07}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TH1.Editor", "TH1.Editor.csproj", "{98A6CD40-90BA-D09A-0F2A-AB7388F81ACC}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipelines.Core.Runtime", "Unity.RenderPipelines.Core.Runtime.csproj", "{bd9fa624-8739-25a7-eb0e-444640a78f6f}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TH1.AOT", "TH1.AOT.csproj", "{E2888E45-5D33-D4F1-4A1D-FEB18C3D64F4}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.ScriptableBuildPipeline.Editor", "Unity.ScriptableBuildPipeline.Editor.csproj", "{6830a9eb-1bb7-0aff-ad7d-1b12cc4ddd79}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TH1.Steam.Editor", "TH1.Steam.Editor.csproj", "{8CAB0A5B-C98C-617A-404C-A43277C19518}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Mathematics", "Unity.Mathematics.csproj", "{22e42b9f-676f-18ca-867c-a7d5d221a80f}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "com.rlabrecque.steamworks.net.editor", "com.rlabrecque.steamworks.net.editor.csproj", "{EF8EBA37-0FEB-1015-410B-B4DEF69F9059}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipelines.Core.Editor", "Unity.RenderPipelines.Core.Editor.csproj", "{a8cca490-fd0e-ac44-1ae7-79afcaec1ad8}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HybridCLR.Editor", "HybridCLR.Editor.csproj", "{b5a5cde4-f776-a3cf-965b-7acd393a4ff9}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Common.Path.Editor", "Unity.2D.Common.Path.Editor.csproj", "{04a97c45-48c6-668f-ac36-dfbabb0f25fe}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Animancer.FSM", "Animancer.FSM.csproj", "{774b51b6-b901-b97e-d593-35721140fea6}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Psdimporter.Editor", "Unity.2D.Psdimporter.Editor.csproj", "{37815a88-829e-5a28-cd21-1a199012c457}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.VisualScripting.Core.Editor", "Unity.VisualScripting.Core.Editor.csproj", "{a3cd058e-d81d-4658-0256-e8eec1407181}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.IK.Runtime", "Unity.2D.IK.Runtime.csproj", "{b70f05c5-f9eb-67a6-6bfb-7a4c15a7c1d6}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrashSight.Runtime", "CrashSight.Runtime.csproj", "{3d419dd7-6a5e-ee92-da4a-be15f62a50f3}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnityEditor.TestRunner", "UnityEditor.TestRunner.csproj", "{84d77f67-4616-0a38-4f03-16ab5e7769f7}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YooAsset.Editor", "YooAsset.Editor.csproj", "{e17e49b1-467b-9f35-a59e-d9aea156de57}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipelines.Universal.Editor", "Unity.RenderPipelines.Universal.Editor.csproj", "{c35b59b3-2d1e-4660-22b4-60a82203cbc5}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.TextMeshPro.Editor", "Unity.TextMeshPro.Editor.csproj", "{651b9223-1d49-3552-fade-892e6e843c3f}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.VisualScripting.Flow.Editor", "Unity.VisualScripting.Flow.Editor.csproj", "{3be7305c-66e6-ffc8-a35a-0a6a8b4f4610}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnityEngine.TestRunner", "UnityEngine.TestRunner.csproj", "{ed943ac8-3d8f-7c17-157d-c4c31cbc811c}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.VisualScripting.Core", "Unity.VisualScripting.Core.csproj", "{3b86216b-72df-a555-5f96-65b39a83c610}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "com.rlabrecque.steamworks.net", "com.rlabrecque.steamworks.net.csproj", "{484ac545-7ac8-ed0f-7146-e9c97c82afbd}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Tilemap.Editor", "Unity.2D.Tilemap.Editor.csproj", "{40b987c2-94ea-9ed4-6f63-abc9b006d1e6}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Searcher.Editor", "Unity.Searcher.Editor.csproj", "{c1108643-0a9f-f78a-fcbe-c1d5d3670ee2}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Burst", "Unity.Burst.csproj", "{7ae84323-8279-2bed-3a96-b03194de76f4}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PsdPlugin", "PsdPlugin.csproj", "{2291f2b0-92e0-7e70-af29-9f195372dc03}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Collections", "Unity.Collections.csproj", "{491ac21f-d830-bfd7-e626-15eabf2df6a9}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Animation.Editor", "Unity.2D.Animation.Editor.csproj", "{9966ea08-1871-7d07-45c9-8be7d88e754e}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.SpriteShape.Editor", "Unity.2D.SpriteShape.Editor.csproj", "{e4fe47e6-c383-9f4e-f5a4-354867d9fe91}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TH1.Logic.Editor", "TH1.Logic.Editor.csproj", "{f14a6547-b244-190f-e6e7-c324b11bcd21}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YooAsset", "YooAsset.csproj", "{969b6393-7326-9cc5-ac5f-d252d24b1a34}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.VisualStudio.Editor", "Unity.VisualStudio.Editor.csproj", "{2fd67010-5958-e159-3cc0-c54cbefa2290}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PPv2URPConverters", "PPv2URPConverters.csproj", "{c035505f-2403-19ee-1749-5ecd4746f976}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OPS.Obfuscator", "OPS.Obfuscator.csproj", "{7ab37ec4-efbd-7f7f-da88-efa56365689d}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NuGetForUnity", "NuGetForUnity.csproj", "{1f33cf80-07a3-b2f9-b7bb-11acc1f175d3}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Rider.Editor", "Unity.Rider.Editor.csproj", "{35b7e023-97a7-dbdc-b926-161520c4dc89}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.InternalAPIEditorBridge.001", "Unity.InternalAPIEditorBridge.001.csproj", "{5655cc19-e755-9069-b166-1343c10b837d}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.SpriteShape.Runtime", "Unity.2D.SpriteShape.Runtime.csproj", "{652001f9-9c1b-a374-8d10-86cd1b4d5f3f}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Animancer", "Animancer.csproj", "{159e65f6-d363-1a6d-ec57-6db30da1b98f}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MemoryPack", "MemoryPack.csproj", "{c6244ad6-8b5a-a312-8d20-3509617ae294}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.VisualScripting.State.Editor", "Unity.VisualScripting.State.Editor.csproj", "{0703fade-f85f-e284-3526-ccf1bb017b33}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Animancer.Examples", "Animancer.Examples.csproj", "{3887fc76-16b0-e25b-d964-8c25cc3023a6}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnityEngine.UI", "UnityEngine.UI.csproj", "{979dfe98-9199-94e5-7d3c-a2abc20e4793}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Burst.CodeGen", "Unity.Burst.CodeGen.csproj", "{20ff02be-4ec6-8c98-c6f9-b038409c414d}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipeline.Universal.ShaderLibrary", "Unity.RenderPipeline.Universal.ShaderLibrary.csproj", "{fbdf8803-6ad7-83ad-0fe9-28598ca1a00f}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.VisualScripting.State", "Unity.VisualScripting.State.csproj", "{4337c050-cc3a-134b-6dfa-c9e140f3f61a}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.TextMeshPro", "Unity.TextMeshPro.csproj", "{dfd7019c-bb86-3498-4973-5d336b1f52ef}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Tilemap.Extras.Editor", "Unity.2D.Tilemap.Extras.Editor.csproj", "{6858fc7a-0902-f5e2-5f0c-b3af5d8c14d7}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Animation.Runtime", "Unity.2D.Animation.Runtime.csproj", "{966594db-397c-5af1-f590-00ceeab21cb6}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.VisualScripting.SettingsProvider.Editor", "Unity.VisualScripting.SettingsProvider.Editor.csproj", "{db89644f-431d-7769-779c-05896c34395b}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.IK.Editor", "Unity.2D.IK.Editor.csproj", "{2330184f-e44c-9b47-a0ec-374ebe1daf06}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp-Editor", "Assembly-CSharp-Editor.csproj", "{c6e61163-200a-3b38-320b-694068de37a5}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.InternalAPIEngineBridge.001", "Unity.InternalAPIEngineBridge.001.csproj", "{90dc1aaf-d7c0-dd6a-a6ed-aa77e7f1a486}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Burst.Editor", "Unity.Burst.Editor.csproj", "{e74d0544-fb3f-a89c-c745-9769758465d8}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Aseprite.Common", "Unity.2D.Aseprite.Common.csproj", "{8f239c03-0b13-b5a7-17e4-12e9342f07e0}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TH1.Editor", "TH1.Editor.csproj", "{40cda698-ba90-9ad0-0f2a-ab7388f81acc}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Common.Editor", "Unity.2D.Common.Editor.csproj", "{945e3271-902a-848a-4836-a63ac22f6bff}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.PixelPerfect", "Unity.2D.PixelPerfect.csproj", "{085a5f8a-e0c1-924e-86ef-8d1110206613}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.PixelPerfect.Editor", "Unity.2D.PixelPerfect.Editor.csproj", "{954606ad-4e98-1746-2d42-97503edb8f42}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Sprite.Editor", "Unity.2D.Sprite.Editor.csproj", "{a8309bda-81a0-0e11-d6b4-bfaf6da6450d}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Common.Runtime", "Unity.2D.Common.Runtime.csproj", "{098d18e4-6ae0-86c7-8616-1c17d236ea89}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TH1.AOT", "TH1.AOT.csproj", "{458e88e2-335d-f1d4-4a1d-feb18c3d64f4}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Mathematics.Editor", "Unity.Mathematics.Editor.csproj", "{b222b8e9-4c55-4797-e65b-2cfa5626b69a}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Tilemap.Extras", "Unity.2D.Tilemap.Extras.csproj", "{95fe389c-81b1-c9f7-0230-926077cb0926}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.InternalAPIEditorBridge.005", "Unity.InternalAPIEditorBridge.005.csproj", "{96f43981-0b0f-178f-6a92-f4488c9b8181}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.ShaderGraph.Utilities", "Unity.ShaderGraph.Utilities.csproj", "{e379cc4a-07ca-e3e7-8188-50d8e1851b65}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.VisualScripting.Shared.Editor", "Unity.VisualScripting.Shared.Editor.csproj", "{58cf9cb8-9dba-8f43-f2f8-e923457c1691}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TH1.Steam.Editor", "TH1.Steam.Editor.csproj", "{5b0aab8c-8cc9-7a61-404c-a43277c19518}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HybridCLR.Runtime", "HybridCLR.Runtime.csproj", "{9df118af-f9b8-47b5-c242-63718d7ed119}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.ScriptableBuildPipeline", "Unity.ScriptableBuildPipeline.csproj", "{2b300fef-22e5-8e33-299d-e81b8a400794}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Collections.DocCodeSamples", "Unity.Collections.DocCodeSamples.csproj", "{7fdf0708-d79d-15b8-5417-a497c97d933b}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "com.rlabrecque.steamworks.net.editor", "com.rlabrecque.steamworks.net.editor.csproj", "{37ba8eef-eb0f-1510-410b-b4def69f9059}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Collections.BurstCompatibilityGen", "Unity.Collections.BurstCompatibilityGen.csproj", "{5a8d4482-bf60-ff37-23a9-6008d09e865c}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.CollabProxy.Editor", "Unity.CollabProxy.Editor.csproj", "{4bef6551-7042-78d6-30a6-28520a4ec193}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary", "Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary.csproj", "{86e9e3b2-607d-95d0-f253-3311097e2c40}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipelines.Core.ShaderLibrary", "Unity.RenderPipelines.Core.ShaderLibrary.csproj", "{12a11b8b-7f02-62f3-33ea-1dd938c79e71}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipelines.Universal.Shaders", "Unity.RenderPipelines.Universal.Shaders.csproj", "{2f530e06-cca7-161a-01b9-0629a5a15367}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NodeCanvas", "NodeCanvas.Player.csproj", "{ec74174d-c1b7-a7a0-0276-f28f73c7038a}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TH1.Hotfix", "TH1.Hotfix.Player.csproj", "{693e2cff-cc5b-352a-fef1-ace2e1eff2ab}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Timeline", "Unity.Timeline.Player.csproj", "{9413d5c4-9215-77d3-3dd8-f6cfaa3fef5e}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParadoxNotion", "ParadoxNotion.Player.csproj", "{bf79b403-c27e-8b6f-c989-840c09bcf65f}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.VisualScripting.Flow", "Unity.VisualScripting.Flow.Player.csproj", "{2abe80e0-9383-9621-569d-cded29b2e0d9}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipelines.Universal.Runtime", "Unity.RenderPipelines.Universal.Runtime.Player.csproj", "{40e4dc91-1eef-62d2-3af4-2dc6d70e65f8}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipelines.Core.Runtime", "Unity.RenderPipelines.Core.Runtime.Player.csproj", "{7622281f-9ce8-e97a-847c-2a4f53d14c44}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Mathematics", "Unity.Mathematics.Player.csproj", "{500ad7e6-b18d-dff0-dcfc-7f5faabf2978}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Animancer.FSM", "Animancer.FSM.Player.csproj", "{a5124360-6af6-d087-0976-78da691e0ca9}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.IK.Runtime", "Unity.2D.IK.Runtime.Player.csproj", "{0de92c9b-1194-1de2-850e-d3808cafbd8a}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrashSight.Runtime", "CrashSight.Runtime.Player.csproj", "{b3f4db19-dda6-32b9-ffe0-47f4ed2b9404}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnityEngine.TestRunner", "UnityEngine.TestRunner.Player.csproj", "{b66601b1-2509-7c66-d9f0-20fae957e91f}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.VisualScripting.Core", "Unity.VisualScripting.Core.Player.csproj", "{aff74e63-4d65-6b53-6bff-07f5db8ce7b8}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "com.rlabrecque.steamworks.net", "com.rlabrecque.steamworks.net.Player.csproj", "{b5067ade-ddfb-2e91-e4e5-e4ff00685c0c}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Burst", "Unity.Burst.Player.csproj", "{08122e21-1203-a254-ce7b-5af4cad3fa58}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Collections", "Unity.Collections.Player.csproj", "{439307fe-edb0-ca46-b09b-ef3cc9ebeff7}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YooAsset", "YooAsset.Player.csproj", "{2f001118-66fa-afe0-ede8-3a5f88c1588e}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OPS.Obfuscator", "OPS.Obfuscator.Player.csproj", "{5c69dac1-06f0-1eb6-354f-eac4236a89b6}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.SpriteShape.Runtime", "Unity.2D.SpriteShape.Runtime.Player.csproj", "{54631365-9fbc-94e3-7f3b-93e34ca45e12}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Animancer", "Animancer.Player.csproj", "{09c97dc4-b115-3e2f-b786-fc8946cfbe43}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MemoryPack", "MemoryPack.Player.csproj", "{d42cb690-61fa-72a1-bdea-1e4564afed7e}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Animancer.Examples", "Animancer.Examples.Player.csproj", "{6fe3f612-9e3a-e0f6-e7cd-29378ba66746}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnityEngine.UI", "UnityEngine.UI.Player.csproj", "{67655f18-9b1c-34a3-64d0-0f7247c6b418}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipeline.Universal.ShaderLibrary", "Unity.RenderPipeline.Universal.ShaderLibrary.Player.csproj", "{684284b7-63ff-ea85-dbf3-3f9ffb4e0583}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.VisualScripting.State", "Unity.VisualScripting.State.Player.csproj", "{3b0ba7c0-94fc-a849-d520-77608a532675}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.TextMeshPro", "Unity.TextMeshPro.Player.csproj", "{16659ea9-de73-6ac7-9407-23f1bd0fbfdb}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Animation.Runtime", "Unity.2D.Animation.Runtime.Player.csproj", "{06f4a22c-1ce8-8e49-c019-d042efc002e2}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.InternalAPIEngineBridge.001", "Unity.InternalAPIEngineBridge.001.Player.csproj", "{44c31b53-8c0b-bed2-f8c0-2f315fbec652}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.PixelPerfect", "Unity.2D.PixelPerfect.Player.csproj", "{e3ed6442-b1bb-7b18-c12d-1e3028ff7519}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Common.Runtime", "Unity.2D.Common.Runtime.Player.csproj", "{7476bdb1-57c7-f61c-3137-1db5d2422fb1}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TH1.AOT", "TH1.AOT.Player.csproj", "{8b68eb68-ef29-38ac-fb66-3cb49bc01cfa}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Tilemap.Extras", "Unity.2D.Tilemap.Extras.Player.csproj", "{5a0bcbde-ee60-8b8d-525a-b92d1519e679}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HybridCLR.Runtime", "HybridCLR.Runtime.Player.csproj", "{ed061814-5f09-f717-7483-c2f0cc53f3c8}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.ScriptableBuildPipeline", "Unity.ScriptableBuildPipeline.Player.csproj", "{1c107de3-017c-5441-0f11-ea5926db0787}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary", "Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary.Player.csproj", "{2f6423df-6b42-08a8-8aa5-06e10b4f2895}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipelines.Core.ShaderLibrary", "Unity.RenderPipelines.Core.ShaderLibrary.Player.csproj", "{bf3a9bca-830b-3997-a9d8-468533514cd6}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipelines.Universal.Shaders", "Unity.RenderPipelines.Universal.Shaders.Player.csproj", "{9ca57443-4f9d-e6c2-b28d-d16608900d22}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp.csproj", "{03938ccd-4b40-8dfb-6b9b-21988d5cac0a}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Mathematics.Tests", "Unity.Mathematics.Tests.csproj", "{16b76928-80d7-3525-3f65-abb1479dad96}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Aseprite.EditorTests", "Unity.2D.Aseprite.EditorTests.csproj", "{dbdb2ec4-fe98-a4fd-8fc5-06a51a0a6416}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipelines.Core.Editor.Tests", "Unity.RenderPipelines.Core.Editor.Tests.csproj", "{38402df3-1d8b-43e6-7d70-21fc7b7c40d4}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.ScriptableBuildPipeline.Editor.Tests", "Unity.ScriptableBuildPipeline.Editor.Tests.csproj", "{b7a0ed36-7150-0913-0b69-44af361ffde2}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Sprite.Package.EditorTests", "Unity.2D.Sprite.Package.EditorTests.csproj", "{0e8dfda0-8601-e29d-2b1c-83b595ba0869}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Burst.Tests.UnitTests", "Unity.Burst.Tests.UnitTests.csproj", "{e445d710-a09b-14ba-8cf2-1d10ec1b763d}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.PixelPerfect.EditorTests", "Unity.2D.PixelPerfect.EditorTests.csproj", "{3413af9c-cd48-3fde-6c6e-8ceb4b996c12}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.SpriteShape.EditorTests", "Unity.2D.SpriteShape.EditorTests.csproj", "{327836d4-652e-2176-cfc2-1492dd9a9cdc}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Common.EditorTests", "Unity.2D.Common.EditorTests.csproj", "{e6b7913c-1aa7-2b9a-9a48-90b67d682a4f}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Searcher.EditorTests", "Unity.Searcher.EditorTests.csproj", "{1502e028-abaf-bbf1-f733-589d09df6062}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Burst.Editor.Tests", "Unity.Burst.Editor.Tests.csproj", "{55fe5d26-e58b-e859-0ea5-3f08916d3b82}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.TextMeshPro.Editor.Tests", "Unity.TextMeshPro.Editor.Tests.csproj", "{66f8153e-d264-e3fc-c0c8-4649b6572425}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocCodeExamples", "DocCodeExamples.csproj", "{7df720ca-a16d-54d1-c4c1-2a843dc29603}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipelines.Universal.Editor.Tests", "Unity.RenderPipelines.Universal.Editor.Tests.csproj", "{a2281099-c63c-475d-742e-779f2008bb94}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Collections.Tests", "Unity.Collections.Tests.csproj", "{fd457172-8b21-66d9-f1e9-d5295c3b818a}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Psdimporter.EditorTests", "Unity.2D.Psdimporter.EditorTests.csproj", "{b8429819-51de-7a59-1524-9b949bd7e25b}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnityEngine.UI.Tests", "UnityEngine.UI.Tests.csproj", "{219c6149-e7e9-29e7-65dd-062bacb5802d}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Collections.Tests.Playmode", "Unity.Collections.Tests.Playmode.csproj", "{4a03ecce-a49b-f7a6-281f-bd8e40f5cb10}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Animation.EditorTests", "Unity.2D.Animation.EditorTests.csproj", "{79419771-2283-4d66-d86e-62d8bbc6371b}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp-firstpass", "Assembly-CSharp-firstpass.csproj", "{09b46226-3263-561e-d797-c9025c53bdd6}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.TextMeshPro.Tests", "Unity.TextMeshPro.Tests.csproj", "{9a02ff8e-ade4-aeb7-6b24-6dc12d676bb2}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SeparateAssembly", "SeparateAssembly.csproj", "{f53401de-a16c-1712-682d-7274eb2e3449}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnityEditor.UI.EditorTests", "UnityEditor.UI.EditorTests.csproj", "{0c845559-1492-f01d-a7ab-a330a661c34d}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Tilemap.Package.EditorTests", "Unity.2D.Tilemap.Package.EditorTests.csproj", "{ff473c2b-23e7-89df-f52b-7b1f14c6b352}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipelines.Universal.Runtime.Tests", "Unity.RenderPipelines.Universal.Runtime.Tests.csproj", "{6fbfa052-2539-09d5-4271-1e302876cc3b}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.ScriptableBuildPipeline.Tests", "Unity.ScriptableBuildPipeline.Tests.csproj", "{043748fa-6551-69f0-1e1c-94a01e5f3f5e}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.2D.Tilemap.Extras.Placeholder.EditorTests", "Unity.2D.Tilemap.Extras.Placeholder.EditorTests.csproj", "{6ae7232c-7862-11a1-34e3-d37adc68ddda}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OverloadedFunctionPointers", "OverloadedFunctionPointers.csproj", "{1118b8e7-4f68-f171-aa7b-6f6ac448b26c}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.RenderPipelines.Core.Runtime.Tests", "Unity.RenderPipelines.Core.Runtime.Tests.csproj", "{256b7ddc-313a-d557-ea2e-c5361c77f2f3}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.ShaderGraph.Editor.Tests", "Unity.ShaderGraph.Editor.Tests.csproj", "{d7acd1aa-3ff5-c452-6c4c-169b58615d26}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
Release|Any CPU = Release|Any CPU
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{504AB00F-3D3F-909B-15CB-381039DF1EC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{0fb04a50-3f3d-9b90-15cb-381039df1ec2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{504AB00F-3D3F-909B-15CB-381039DF1EC2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{0fb04a50-3f3d-9b90-15cb-381039df1ec2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{504AB00F-3D3F-909B-15CB-381039DF1EC2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{a782d273-2dcb-29ef-aed6-2182e01638a7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{504AB00F-3D3F-909B-15CB-381039DF1EC2}.Release|Any CPU.Build.0 = Release|Any CPU
|
{a782d273-2dcb-29ef-aed6-2182e01638a7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{73D282A7-CB2D-EF29-AED6-2182E01638A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{63b491c9-db19-5561-f15e-1c9ea0e3c9f0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{73D282A7-CB2D-EF29-AED6-2182E01638A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{63b491c9-db19-5561-f15e-1c9ea0e3c9f0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{73D282A7-CB2D-EF29-AED6-2182E01638A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{8fde539b-b477-26b5-0f99-c769ace654db}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{73D282A7-CB2D-EF29-AED6-2182E01638A7}.Release|Any CPU.Build.0 = Release|Any CPU
|
{8fde539b-b477-26b5-0f99-c769ace654db}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{6E3594B9-F350-38E8-E051-007A051E45C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{b994356e-50f3-e838-e051-007a051e45c9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{6E3594B9-F350-38E8-E051-007A051E45C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{b994356e-50f3-e838-e051-007a051e45c9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{6E3594B9-F350-38E8-E051-007A051E45C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{8e089428-a193-2945-36a1-b1f8757c4203}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{6E3594B9-F350-38E8-E051-007A051E45C9}.Release|Any CPU.Build.0 = Release|Any CPU
|
{8e089428-a193-2945-36a1-b1f8757c4203}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{B6514B77-01B9-7EB9-D593-35721140FEA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{f4cf6b1d-2314-3cd4-2919-94501cec3479}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{B6514B77-01B9-7EB9-D593-35721140FEA6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{f4cf6b1d-2314-3cd4-2919-94501cec3479}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{B6514B77-01B9-7EB9-D593-35721140FEA6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{c678c602-0a4a-3246-5b09-5b414fc0d5de}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{B6514B77-01B9-7EB9-D593-35721140FEA6}.Release|Any CPU.Build.0 = Release|Any CPU
|
{c678c602-0a4a-3246-5b09-5b414fc0d5de}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{D79D413D-5E6A-92EE-DA4A-BE15F62A50F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{74e1c5c0-7c72-fa9f-cd43-b55bdef754da}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{D79D413D-5E6A-92EE-DA4A-BE15F62A50F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{74e1c5c0-7c72-fa9f-cd43-b55bdef754da}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{D79D413D-5E6A-92EE-DA4A-BE15F62A50F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{4f63daae-f5cd-01d3-9fa4-bd9bc22dc82d}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{D79D413D-5E6A-92EE-DA4A-BE15F62A50F3}.Release|Any CPU.Build.0 = Release|Any CPU
|
{4f63daae-f5cd-01d3-9fa4-bd9bc22dc82d}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{45C54A48-C87A-0FED-7146-E9C97C82AFBD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{9f94db9c-5882-04d7-c896-b8fd99196c07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{45C54A48-C87A-0FED-7146-E9C97C82AFBD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{9f94db9c-5882-04d7-c896-b8fd99196c07}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{45C54A48-C87A-0FED-7146-E9C97C82AFBD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{bd9fa624-8739-25a7-eb0e-444640a78f6f}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{45C54A48-C87A-0FED-7146-E9C97C82AFBD}.Release|Any CPU.Build.0 = Release|Any CPU
|
{bd9fa624-8739-25a7-eb0e-444640a78f6f}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{47654AF1-44B2-0F19-E6E7-C324B11BCD21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{6830a9eb-1bb7-0aff-ad7d-1b12cc4ddd79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{47654AF1-44B2-0F19-E6E7-C324B11BCD21}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{6830a9eb-1bb7-0aff-ad7d-1b12cc4ddd79}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{47654AF1-44B2-0F19-E6E7-C324B11BCD21}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{22e42b9f-676f-18ca-867c-a7d5d221a80f}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{47654AF1-44B2-0F19-E6E7-C324B11BCD21}.Release|Any CPU.Build.0 = Release|Any CPU
|
{22e42b9f-676f-18ca-867c-a7d5d221a80f}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{C47EB37A-BDEF-7F7F-DA88-EFA56365689D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{a8cca490-fd0e-ac44-1ae7-79afcaec1ad8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{C47EB37A-BDEF-7F7F-DA88-EFA56365689D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{a8cca490-fd0e-ac44-1ae7-79afcaec1ad8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{C47EB37A-BDEF-7F7F-DA88-EFA56365689D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{b5a5cde4-f776-a3cf-965b-7acd393a4ff9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{C47EB37A-BDEF-7F7F-DA88-EFA56365689D}.Release|Any CPU.Build.0 = Release|Any CPU
|
{b5a5cde4-f776-a3cf-965b-7acd393a4ff9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{F6659E15-63D3-6D1A-EC57-6DB30DA1B98F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{04a97c45-48c6-668f-ac36-dfbabb0f25fe}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{F6659E15-63D3-6D1A-EC57-6DB30DA1B98F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{04a97c45-48c6-668f-ac36-dfbabb0f25fe}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{F6659E15-63D3-6D1A-EC57-6DB30DA1B98F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{774b51b6-b901-b97e-d593-35721140fea6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{F6659E15-63D3-6D1A-EC57-6DB30DA1B98F}.Release|Any CPU.Build.0 = Release|Any CPU
|
{774b51b6-b901-b97e-d593-35721140fea6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{76FC8738-B016-5BE2-D964-8C25CC3023A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{37815a88-829e-5a28-cd21-1a199012c457}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{76FC8738-B016-5BE2-D964-8C25CC3023A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{37815a88-829e-5a28-cd21-1a199012c457}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{76FC8738-B016-5BE2-D964-8C25CC3023A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{a3cd058e-d81d-4658-0256-e8eec1407181}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{76FC8738-B016-5BE2-D964-8C25CC3023A6}.Release|Any CPU.Build.0 = Release|Any CPU
|
{a3cd058e-d81d-4658-0256-e8eec1407181}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{6311E6C6-0A20-383B-320B-694068DE37A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{b70f05c5-f9eb-67a6-6bfb-7a4c15a7c1d6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{6311E6C6-0A20-383B-320B-694068DE37A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{b70f05c5-f9eb-67a6-6bfb-7a4c15a7c1d6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{6311E6C6-0A20-383B-320B-694068DE37A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{3d419dd7-6a5e-ee92-da4a-be15f62a50f3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{6311E6C6-0A20-383B-320B-694068DE37A5}.Release|Any CPU.Build.0 = Release|Any CPU
|
{3d419dd7-6a5e-ee92-da4a-be15f62a50f3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{98A6CD40-90BA-D09A-0F2A-AB7388F81ACC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{84d77f67-4616-0a38-4f03-16ab5e7769f7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{98A6CD40-90BA-D09A-0F2A-AB7388F81ACC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{84d77f67-4616-0a38-4f03-16ab5e7769f7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{98A6CD40-90BA-D09A-0F2A-AB7388F81ACC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{e17e49b1-467b-9f35-a59e-d9aea156de57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{98A6CD40-90BA-D09A-0F2A-AB7388F81ACC}.Release|Any CPU.Build.0 = Release|Any CPU
|
{e17e49b1-467b-9f35-a59e-d9aea156de57}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{E2888E45-5D33-D4F1-4A1D-FEB18C3D64F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{c35b59b3-2d1e-4660-22b4-60a82203cbc5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{E2888E45-5D33-D4F1-4A1D-FEB18C3D64F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{c35b59b3-2d1e-4660-22b4-60a82203cbc5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{E2888E45-5D33-D4F1-4A1D-FEB18C3D64F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{651b9223-1d49-3552-fade-892e6e843c3f}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{E2888E45-5D33-D4F1-4A1D-FEB18C3D64F4}.Release|Any CPU.Build.0 = Release|Any CPU
|
{651b9223-1d49-3552-fade-892e6e843c3f}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{8CAB0A5B-C98C-617A-404C-A43277C19518}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{3be7305c-66e6-ffc8-a35a-0a6a8b4f4610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{8CAB0A5B-C98C-617A-404C-A43277C19518}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{3be7305c-66e6-ffc8-a35a-0a6a8b4f4610}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{8CAB0A5B-C98C-617A-404C-A43277C19518}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{ed943ac8-3d8f-7c17-157d-c4c31cbc811c}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{8CAB0A5B-C98C-617A-404C-A43277C19518}.Release|Any CPU.Build.0 = Release|Any CPU
|
{ed943ac8-3d8f-7c17-157d-c4c31cbc811c}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{EF8EBA37-0FEB-1015-410B-B4DEF69F9059}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{3b86216b-72df-a555-5f96-65b39a83c610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{EF8EBA37-0FEB-1015-410B-B4DEF69F9059}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{3b86216b-72df-a555-5f96-65b39a83c610}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{EF8EBA37-0FEB-1015-410B-B4DEF69F9059}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{484ac545-7ac8-ed0f-7146-e9c97c82afbd}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{EF8EBA37-0FEB-1015-410B-B4DEF69F9059}.Release|Any CPU.Build.0 = Release|Any CPU
|
{484ac545-7ac8-ed0f-7146-e9c97c82afbd}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{40b987c2-94ea-9ed4-6f63-abc9b006d1e6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{40b987c2-94ea-9ed4-6f63-abc9b006d1e6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{c1108643-0a9f-f78a-fcbe-c1d5d3670ee2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{c1108643-0a9f-f78a-fcbe-c1d5d3670ee2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{7ae84323-8279-2bed-3a96-b03194de76f4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{7ae84323-8279-2bed-3a96-b03194de76f4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{2291f2b0-92e0-7e70-af29-9f195372dc03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{2291f2b0-92e0-7e70-af29-9f195372dc03}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{491ac21f-d830-bfd7-e626-15eabf2df6a9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{491ac21f-d830-bfd7-e626-15eabf2df6a9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{9966ea08-1871-7d07-45c9-8be7d88e754e}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{9966ea08-1871-7d07-45c9-8be7d88e754e}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{e4fe47e6-c383-9f4e-f5a4-354867d9fe91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{e4fe47e6-c383-9f4e-f5a4-354867d9fe91}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{f14a6547-b244-190f-e6e7-c324b11bcd21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{f14a6547-b244-190f-e6e7-c324b11bcd21}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{969b6393-7326-9cc5-ac5f-d252d24b1a34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{969b6393-7326-9cc5-ac5f-d252d24b1a34}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{2fd67010-5958-e159-3cc0-c54cbefa2290}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{2fd67010-5958-e159-3cc0-c54cbefa2290}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{c035505f-2403-19ee-1749-5ecd4746f976}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{c035505f-2403-19ee-1749-5ecd4746f976}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{7ab37ec4-efbd-7f7f-da88-efa56365689d}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{7ab37ec4-efbd-7f7f-da88-efa56365689d}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1f33cf80-07a3-b2f9-b7bb-11acc1f175d3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{1f33cf80-07a3-b2f9-b7bb-11acc1f175d3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{35b7e023-97a7-dbdc-b926-161520c4dc89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{35b7e023-97a7-dbdc-b926-161520c4dc89}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{5655cc19-e755-9069-b166-1343c10b837d}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{5655cc19-e755-9069-b166-1343c10b837d}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{652001f9-9c1b-a374-8d10-86cd1b4d5f3f}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{652001f9-9c1b-a374-8d10-86cd1b4d5f3f}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{159e65f6-d363-1a6d-ec57-6db30da1b98f}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{159e65f6-d363-1a6d-ec57-6db30da1b98f}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{c6244ad6-8b5a-a312-8d20-3509617ae294}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{c6244ad6-8b5a-a312-8d20-3509617ae294}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{0703fade-f85f-e284-3526-ccf1bb017b33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{0703fade-f85f-e284-3526-ccf1bb017b33}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{3887fc76-16b0-e25b-d964-8c25cc3023a6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{3887fc76-16b0-e25b-d964-8c25cc3023a6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{979dfe98-9199-94e5-7d3c-a2abc20e4793}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{979dfe98-9199-94e5-7d3c-a2abc20e4793}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{20ff02be-4ec6-8c98-c6f9-b038409c414d}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{20ff02be-4ec6-8c98-c6f9-b038409c414d}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{fbdf8803-6ad7-83ad-0fe9-28598ca1a00f}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{fbdf8803-6ad7-83ad-0fe9-28598ca1a00f}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{4337c050-cc3a-134b-6dfa-c9e140f3f61a}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{4337c050-cc3a-134b-6dfa-c9e140f3f61a}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{dfd7019c-bb86-3498-4973-5d336b1f52ef}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{dfd7019c-bb86-3498-4973-5d336b1f52ef}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{6858fc7a-0902-f5e2-5f0c-b3af5d8c14d7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{6858fc7a-0902-f5e2-5f0c-b3af5d8c14d7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{966594db-397c-5af1-f590-00ceeab21cb6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{966594db-397c-5af1-f590-00ceeab21cb6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{db89644f-431d-7769-779c-05896c34395b}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{db89644f-431d-7769-779c-05896c34395b}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{2330184f-e44c-9b47-a0ec-374ebe1daf06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{2330184f-e44c-9b47-a0ec-374ebe1daf06}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{c6e61163-200a-3b38-320b-694068de37a5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{c6e61163-200a-3b38-320b-694068de37a5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{90dc1aaf-d7c0-dd6a-a6ed-aa77e7f1a486}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{90dc1aaf-d7c0-dd6a-a6ed-aa77e7f1a486}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{e74d0544-fb3f-a89c-c745-9769758465d8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{e74d0544-fb3f-a89c-c745-9769758465d8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{8f239c03-0b13-b5a7-17e4-12e9342f07e0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{8f239c03-0b13-b5a7-17e4-12e9342f07e0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{40cda698-ba90-9ad0-0f2a-ab7388f81acc}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{40cda698-ba90-9ad0-0f2a-ab7388f81acc}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{945e3271-902a-848a-4836-a63ac22f6bff}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{945e3271-902a-848a-4836-a63ac22f6bff}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{085a5f8a-e0c1-924e-86ef-8d1110206613}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{085a5f8a-e0c1-924e-86ef-8d1110206613}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{954606ad-4e98-1746-2d42-97503edb8f42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{954606ad-4e98-1746-2d42-97503edb8f42}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{a8309bda-81a0-0e11-d6b4-bfaf6da6450d}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{a8309bda-81a0-0e11-d6b4-bfaf6da6450d}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{098d18e4-6ae0-86c7-8616-1c17d236ea89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{098d18e4-6ae0-86c7-8616-1c17d236ea89}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{458e88e2-335d-f1d4-4a1d-feb18c3d64f4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{458e88e2-335d-f1d4-4a1d-feb18c3d64f4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{b222b8e9-4c55-4797-e65b-2cfa5626b69a}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{b222b8e9-4c55-4797-e65b-2cfa5626b69a}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{95fe389c-81b1-c9f7-0230-926077cb0926}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{95fe389c-81b1-c9f7-0230-926077cb0926}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{96f43981-0b0f-178f-6a92-f4488c9b8181}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{96f43981-0b0f-178f-6a92-f4488c9b8181}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{e379cc4a-07ca-e3e7-8188-50d8e1851b65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{e379cc4a-07ca-e3e7-8188-50d8e1851b65}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{58cf9cb8-9dba-8f43-f2f8-e923457c1691}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{58cf9cb8-9dba-8f43-f2f8-e923457c1691}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{5b0aab8c-8cc9-7a61-404c-a43277c19518}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{5b0aab8c-8cc9-7a61-404c-a43277c19518}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{9df118af-f9b8-47b5-c242-63718d7ed119}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{9df118af-f9b8-47b5-c242-63718d7ed119}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{2b300fef-22e5-8e33-299d-e81b8a400794}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{2b300fef-22e5-8e33-299d-e81b8a400794}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{7fdf0708-d79d-15b8-5417-a497c97d933b}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{7fdf0708-d79d-15b8-5417-a497c97d933b}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{37ba8eef-eb0f-1510-410b-b4def69f9059}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{37ba8eef-eb0f-1510-410b-b4def69f9059}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{5a8d4482-bf60-ff37-23a9-6008d09e865c}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{5a8d4482-bf60-ff37-23a9-6008d09e865c}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{4bef6551-7042-78d6-30a6-28520a4ec193}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{4bef6551-7042-78d6-30a6-28520a4ec193}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{86e9e3b2-607d-95d0-f253-3311097e2c40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{86e9e3b2-607d-95d0-f253-3311097e2c40}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{12a11b8b-7f02-62f3-33ea-1dd938c79e71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{12a11b8b-7f02-62f3-33ea-1dd938c79e71}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{2f530e06-cca7-161a-01b9-0629a5a15367}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{2f530e06-cca7-161a-01b9-0629a5a15367}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{ec74174d-c1b7-a7a0-0276-f28f73c7038a}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{ec74174d-c1b7-a7a0-0276-f28f73c7038a}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{693e2cff-cc5b-352a-fef1-ace2e1eff2ab}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{693e2cff-cc5b-352a-fef1-ace2e1eff2ab}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{9413d5c4-9215-77d3-3dd8-f6cfaa3fef5e}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{9413d5c4-9215-77d3-3dd8-f6cfaa3fef5e}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{bf79b403-c27e-8b6f-c989-840c09bcf65f}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{bf79b403-c27e-8b6f-c989-840c09bcf65f}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{2abe80e0-9383-9621-569d-cded29b2e0d9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{2abe80e0-9383-9621-569d-cded29b2e0d9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{40e4dc91-1eef-62d2-3af4-2dc6d70e65f8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{40e4dc91-1eef-62d2-3af4-2dc6d70e65f8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{7622281f-9ce8-e97a-847c-2a4f53d14c44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{7622281f-9ce8-e97a-847c-2a4f53d14c44}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{500ad7e6-b18d-dff0-dcfc-7f5faabf2978}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{500ad7e6-b18d-dff0-dcfc-7f5faabf2978}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{a5124360-6af6-d087-0976-78da691e0ca9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{a5124360-6af6-d087-0976-78da691e0ca9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{0de92c9b-1194-1de2-850e-d3808cafbd8a}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{0de92c9b-1194-1de2-850e-d3808cafbd8a}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{b3f4db19-dda6-32b9-ffe0-47f4ed2b9404}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{b3f4db19-dda6-32b9-ffe0-47f4ed2b9404}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{b66601b1-2509-7c66-d9f0-20fae957e91f}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{b66601b1-2509-7c66-d9f0-20fae957e91f}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{aff74e63-4d65-6b53-6bff-07f5db8ce7b8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{aff74e63-4d65-6b53-6bff-07f5db8ce7b8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{b5067ade-ddfb-2e91-e4e5-e4ff00685c0c}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{b5067ade-ddfb-2e91-e4e5-e4ff00685c0c}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{08122e21-1203-a254-ce7b-5af4cad3fa58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{08122e21-1203-a254-ce7b-5af4cad3fa58}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{439307fe-edb0-ca46-b09b-ef3cc9ebeff7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{439307fe-edb0-ca46-b09b-ef3cc9ebeff7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{2f001118-66fa-afe0-ede8-3a5f88c1588e}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{2f001118-66fa-afe0-ede8-3a5f88c1588e}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{5c69dac1-06f0-1eb6-354f-eac4236a89b6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{5c69dac1-06f0-1eb6-354f-eac4236a89b6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{54631365-9fbc-94e3-7f3b-93e34ca45e12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{54631365-9fbc-94e3-7f3b-93e34ca45e12}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{09c97dc4-b115-3e2f-b786-fc8946cfbe43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{09c97dc4-b115-3e2f-b786-fc8946cfbe43}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{d42cb690-61fa-72a1-bdea-1e4564afed7e}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{d42cb690-61fa-72a1-bdea-1e4564afed7e}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{6fe3f612-9e3a-e0f6-e7cd-29378ba66746}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{6fe3f612-9e3a-e0f6-e7cd-29378ba66746}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{67655f18-9b1c-34a3-64d0-0f7247c6b418}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{67655f18-9b1c-34a3-64d0-0f7247c6b418}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{684284b7-63ff-ea85-dbf3-3f9ffb4e0583}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{684284b7-63ff-ea85-dbf3-3f9ffb4e0583}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{3b0ba7c0-94fc-a849-d520-77608a532675}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{3b0ba7c0-94fc-a849-d520-77608a532675}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{16659ea9-de73-6ac7-9407-23f1bd0fbfdb}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{16659ea9-de73-6ac7-9407-23f1bd0fbfdb}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{06f4a22c-1ce8-8e49-c019-d042efc002e2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{06f4a22c-1ce8-8e49-c019-d042efc002e2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{44c31b53-8c0b-bed2-f8c0-2f315fbec652}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{44c31b53-8c0b-bed2-f8c0-2f315fbec652}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{e3ed6442-b1bb-7b18-c12d-1e3028ff7519}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{e3ed6442-b1bb-7b18-c12d-1e3028ff7519}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{7476bdb1-57c7-f61c-3137-1db5d2422fb1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{7476bdb1-57c7-f61c-3137-1db5d2422fb1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{8b68eb68-ef29-38ac-fb66-3cb49bc01cfa}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{8b68eb68-ef29-38ac-fb66-3cb49bc01cfa}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{5a0bcbde-ee60-8b8d-525a-b92d1519e679}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{5a0bcbde-ee60-8b8d-525a-b92d1519e679}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{ed061814-5f09-f717-7483-c2f0cc53f3c8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{ed061814-5f09-f717-7483-c2f0cc53f3c8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1c107de3-017c-5441-0f11-ea5926db0787}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{1c107de3-017c-5441-0f11-ea5926db0787}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{2f6423df-6b42-08a8-8aa5-06e10b4f2895}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{2f6423df-6b42-08a8-8aa5-06e10b4f2895}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{bf3a9bca-830b-3997-a9d8-468533514cd6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{bf3a9bca-830b-3997-a9d8-468533514cd6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{9ca57443-4f9d-e6c2-b28d-d16608900d22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{9ca57443-4f9d-e6c2-b28d-d16608900d22}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{03938ccd-4b40-8dfb-6b9b-21988d5cac0a}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{03938ccd-4b40-8dfb-6b9b-21988d5cac0a}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{16b76928-80d7-3525-3f65-abb1479dad96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{16b76928-80d7-3525-3f65-abb1479dad96}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{dbdb2ec4-fe98-a4fd-8fc5-06a51a0a6416}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{dbdb2ec4-fe98-a4fd-8fc5-06a51a0a6416}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{38402df3-1d8b-43e6-7d70-21fc7b7c40d4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{38402df3-1d8b-43e6-7d70-21fc7b7c40d4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{b7a0ed36-7150-0913-0b69-44af361ffde2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{b7a0ed36-7150-0913-0b69-44af361ffde2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{0e8dfda0-8601-e29d-2b1c-83b595ba0869}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{0e8dfda0-8601-e29d-2b1c-83b595ba0869}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{e445d710-a09b-14ba-8cf2-1d10ec1b763d}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{e445d710-a09b-14ba-8cf2-1d10ec1b763d}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{3413af9c-cd48-3fde-6c6e-8ceb4b996c12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{3413af9c-cd48-3fde-6c6e-8ceb4b996c12}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{327836d4-652e-2176-cfc2-1492dd9a9cdc}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{327836d4-652e-2176-cfc2-1492dd9a9cdc}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{e6b7913c-1aa7-2b9a-9a48-90b67d682a4f}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{e6b7913c-1aa7-2b9a-9a48-90b67d682a4f}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1502e028-abaf-bbf1-f733-589d09df6062}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{1502e028-abaf-bbf1-f733-589d09df6062}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{55fe5d26-e58b-e859-0ea5-3f08916d3b82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{55fe5d26-e58b-e859-0ea5-3f08916d3b82}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{66f8153e-d264-e3fc-c0c8-4649b6572425}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{66f8153e-d264-e3fc-c0c8-4649b6572425}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{7df720ca-a16d-54d1-c4c1-2a843dc29603}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{7df720ca-a16d-54d1-c4c1-2a843dc29603}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{a2281099-c63c-475d-742e-779f2008bb94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{a2281099-c63c-475d-742e-779f2008bb94}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{fd457172-8b21-66d9-f1e9-d5295c3b818a}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{fd457172-8b21-66d9-f1e9-d5295c3b818a}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{b8429819-51de-7a59-1524-9b949bd7e25b}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{b8429819-51de-7a59-1524-9b949bd7e25b}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{219c6149-e7e9-29e7-65dd-062bacb5802d}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{219c6149-e7e9-29e7-65dd-062bacb5802d}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{4a03ecce-a49b-f7a6-281f-bd8e40f5cb10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{4a03ecce-a49b-f7a6-281f-bd8e40f5cb10}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{79419771-2283-4d66-d86e-62d8bbc6371b}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{79419771-2283-4d66-d86e-62d8bbc6371b}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{09b46226-3263-561e-d797-c9025c53bdd6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{09b46226-3263-561e-d797-c9025c53bdd6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{9a02ff8e-ade4-aeb7-6b24-6dc12d676bb2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{9a02ff8e-ade4-aeb7-6b24-6dc12d676bb2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{f53401de-a16c-1712-682d-7274eb2e3449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{f53401de-a16c-1712-682d-7274eb2e3449}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{0c845559-1492-f01d-a7ab-a330a661c34d}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{0c845559-1492-f01d-a7ab-a330a661c34d}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{ff473c2b-23e7-89df-f52b-7b1f14c6b352}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{ff473c2b-23e7-89df-f52b-7b1f14c6b352}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{6fbfa052-2539-09d5-4271-1e302876cc3b}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{6fbfa052-2539-09d5-4271-1e302876cc3b}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{043748fa-6551-69f0-1e1c-94a01e5f3f5e}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{043748fa-6551-69f0-1e1c-94a01e5f3f5e}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{6ae7232c-7862-11a1-34e3-d37adc68ddda}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{6ae7232c-7862-11a1-34e3-d37adc68ddda}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1118b8e7-4f68-f171-aa7b-6f6ac448b26c}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{1118b8e7-4f68-f171-aa7b-6f6ac448b26c}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{256b7ddc-313a-d557-ea2e-c5361c77f2f3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{256b7ddc-313a-d557-ea2e-c5361c77f2f3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{d7acd1aa-3ff5-c452-6c4c-169b58615d26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{d7acd1aa-3ff5-c452-6c4c-169b58615d26}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user