From 4ee9066a204a4da34e4c2691b196cd28c13caaa7 Mon Sep 17 00:00:00 2001 From: Zingabopp Date: Wed, 10 Jun 2020 11:40:12 -0500 Subject: [PATCH 01/22] Added Libs and Plugins folder --- IPA.Loader/Loader/PluginLoader.cs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/IPA.Loader/Loader/PluginLoader.cs b/IPA.Loader/Loader/PluginLoader.cs index 98e377e8..aefc86fa 100644 --- a/IPA.Loader/Loader/PluginLoader.cs +++ b/IPA.Loader/Loader/PluginLoader.cs @@ -100,7 +100,9 @@ namespace IPA.Loader Logger.loader.Critical("Error loading own manifest"); Logger.loader.Critical(e); } - + var resolver = new CecilLibLoader(); + resolver.AddSearchDirectory(UnityGame.LibraryPath); + resolver.AddSearchDirectory(UnityGame.PluginsPath); foreach (var plugin in plugins) { var metadata = new PluginMetadata @@ -115,7 +117,7 @@ namespace IPA.Loader { ReadingMode = ReadingMode.Immediate, ReadWrite = false, - AssemblyResolver = new CecilLibLoader() + AssemblyResolver = resolver }).MainModule; string pluginNs = ""; @@ -303,7 +305,7 @@ namespace IPA.Loader /// When this is the set in an structure, the member /// will contain the thrown exception. /// - Error, + Error, /// /// The plugin this reason is associated with has the same ID as another plugin whose information was /// already loaded. @@ -333,12 +335,12 @@ namespace IPA.Loader /// The plugin this reason is associated with was released for a game update, but is still considered /// present for the purposes of updating. /// - Released, + Released, /// /// The plugin this reason is associated with was denied from loading by a /// that it marks. /// - Feature, + Feature, /// /// The plugin this reason is assoicated with is unsupported. /// @@ -431,8 +433,8 @@ namespace IPA.Loader => !(left == right); } - internal partial class PluginLoader - { + internal partial class PluginLoader + { // keep track of these for the updater; it should still be able to update mods not loaded // the thing -> the reason internal static Dictionary ignoredPlugins = new Dictionary(); @@ -440,7 +442,7 @@ namespace IPA.Loader internal static void Resolve() { // resolves duplicates and conflicts, etc PluginsMetadata.Sort((a, b) => b.Version.CompareTo(a.Version)); - + var ids = new HashSet(); var ignore = new Dictionary(); var resolved = new List(PluginsMetadata.Count); @@ -687,7 +689,7 @@ namespace IPA.Loader { var parsedFeatures = PluginsMetadata.Select(m => (metadata: m, - features: m.Manifest.Features.Select(feature => + features: m.Manifest.Features.Select(feature => (feature, parsed: Ref.Create(null)) ).ToList() ) @@ -844,7 +846,7 @@ namespace IPA.Loader return null; } } - + try { exec.Create(); From 571f646a1a3dae1118be2c1fe30a383191019911 Mon Sep 17 00:00:00 2001 From: Eris Date: Sat, 13 Jun 2020 20:14:53 +0200 Subject: [PATCH 02/22] Fixed documentation link in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4e4bbb17..7540c3a0 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # ![BSIPA](docs/images/banner_dark.svg) [![Build status](https://ci.appveyor.com/api/projects/status/1ruhnnfeudrrd097?svg=true)](https://ci.appveyor.com/project/nike4613/beatsaber-ipa-reloaded-9smsb) -[ALL DOCUMENTATION HAS MOVED HERE](https://beat-saber-modding-group.github.io/BeatSaber-IPA-Reloaded/) +[ALL DOCUMENTATION HAS MOVED HERE](https://bsmg.github.io/BeatSaber-IPA-Reloaded/) From a03dc2d043177c94e0fa4e7d248ee49471dd8b4d Mon Sep 17 00:00:00 2001 From: Zingabopp Date: Fri, 24 Jul 2020 19:50:13 -0500 Subject: [PATCH 03/22] Projects fixed --- BSIPA.sln | 146 ++++++++++++++----------------- IPA.Injector/IPA.Injector.csproj | 3 - IPA.Loader/IPA.Loader.csproj | 3 - 3 files changed, 68 insertions(+), 84 deletions(-) diff --git a/BSIPA.sln b/BSIPA.sln index f18b56a4..dffc04de 100644 --- a/BSIPA.sln +++ b/BSIPA.sln @@ -9,16 +9,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IPA", "IPA\IPA.csproj", "{1 {2A1AF16B-27F1-46E0-9A95-181516BC1CB7} = {2A1AF16B-27F1-46E0-9A95-181516BC1CB7} EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IPA.Loader", "IPA.Loader\IPA.Loader.csproj", "{5AD344F0-01A0-4CA8-92E5-9D095737744D}" - ProjectSection(ProjectDependencies) = postProject - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} = {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IPA.Injector", "IPA.Injector\IPA.Injector.csproj", "{2A1AF16B-27F1-46E0-9A95-181516BC1CB7}" - ProjectSection(ProjectDependencies) = postProject - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} = {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "proxy", "Doorstop\Proxy\Proxy.vcxproj", "{88609E16-731F-46C9-8139-6B1A7A83240D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{C79C2C3A-A7FC-40D6-A5CC-9752A661AFA9}" @@ -45,6 +35,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BSIPA-Meta", "BSIPA-Meta\BS EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Net3-Proxy", "Net3-Proxy\Net3-Proxy.csproj", "{642F52DA-90F9-40E3-8784-6964F36752FB}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IPA.Loader", "IPA.Loader\IPA.Loader.csproj", "{5AD344F0-01A0-4CA8-92E5-9D095737744D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IPA.Injector", "IPA.Injector\IPA.Injector.csproj", "{2A1AF16B-27F1-46E0-9A95-181516BC1CB7}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64-Net3 = Debug|x64-Net3 @@ -97,70 +91,6 @@ Global {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x86-Net3.Build.0 = Verbose|Any CPU {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x86-Net4.ActiveCfg = Verbose|Any CPU {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x86-Net4.Build.0 = Verbose|Any CPU - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net3.ActiveCfg = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net3.Build.0 = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net4.ActiveCfg = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net4.Build.0 = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net3.ActiveCfg = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net3.Build.0 = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net4.ActiveCfg = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net4.Build.0 = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net3.ActiveCfg = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net3.Build.0 = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net4.ActiveCfg = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net4.Build.0 = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net3.ActiveCfg = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net3.Build.0 = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net4.ActiveCfg = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net4.Build.0 = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net3.ActiveCfg = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net3.Build.0 = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net4.ActiveCfg = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net4.Build.0 = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net3.ActiveCfg = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net3.Build.0 = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net4.ActiveCfg = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net4.Build.0 = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net3.ActiveCfg = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net3.Build.0 = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net4.ActiveCfg = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net4.Build.0 = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net3.ActiveCfg = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net3.Build.0 = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net4.ActiveCfg = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net4.Build.0 = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net3.ActiveCfg = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net3.Build.0 = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net4.ActiveCfg = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net4.Build.0 = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net3.ActiveCfg = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net3.Build.0 = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net4.ActiveCfg = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net4.Build.0 = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net3.ActiveCfg = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net3.Build.0 = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net4.ActiveCfg = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net4.Build.0 = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net3.ActiveCfg = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net3.Build.0 = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net4.ActiveCfg = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net4.Build.0 = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net3.ActiveCfg = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net3.Build.0 = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net4.ActiveCfg = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net4.Build.0 = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net3.ActiveCfg = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net3.Build.0 = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net4.ActiveCfg = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net4.Build.0 = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net3.ActiveCfg = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net3.Build.0 = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net4.ActiveCfg = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net4.Build.0 = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net3.ActiveCfg = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net3.Build.0 = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net4.ActiveCfg = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net4.Build.0 = Debug|Net4 {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x64-Net3.ActiveCfg = Release|x64 {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x64-Net3.Build.0 = Release|x64 {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x64-Net4.ActiveCfg = Release|x64 @@ -194,13 +124,9 @@ Global {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose|x86-Net4.ActiveCfg = Verbose_Release|Win32 {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose|x86-Net4.Build.0 = Verbose_Release|Win32 {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Debug|x64-Net3.ActiveCfg = Debug|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Debug|x64-Net3.Build.0 = Debug|Any CPU {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Debug|x64-Net4.ActiveCfg = Debug|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Debug|x64-Net4.Build.0 = Debug|Any CPU {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Debug|x86-Net3.ActiveCfg = Debug|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Debug|x86-Net3.Build.0 = Debug|Any CPU {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Debug|x86-Net4.ActiveCfg = Debug|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Debug|x86-Net4.Build.0 = Debug|Any CPU {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Release|x64-Net3.ActiveCfg = Release|Any CPU {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Release|x64-Net4.ActiveCfg = Release|Any CPU {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Release|x86-Net3.ActiveCfg = Release|Any CPU @@ -273,6 +199,70 @@ Global {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose|x86-Net3.ActiveCfg = Release|Any CPU {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose|x86-Net3.Build.0 = Release|Any CPU {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose|x86-Net4.ActiveCfg = Release|Any CPU + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net3.ActiveCfg = Debug|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net3.Build.0 = Debug|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net4.ActiveCfg = Debug|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net4.Build.0 = Debug|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net3.ActiveCfg = Debug|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net3.Build.0 = Debug|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net4.ActiveCfg = Debug|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net4.Build.0 = Debug|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net3.ActiveCfg = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net3.Build.0 = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net4.ActiveCfg = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net4.Build.0 = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net3.ActiveCfg = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net3.Build.0 = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net4.ActiveCfg = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net4.Build.0 = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net3.ActiveCfg = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net3.Build.0 = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net4.ActiveCfg = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net4.Build.0 = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net3.ActiveCfg = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net3.Build.0 = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net4.ActiveCfg = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net4.Build.0 = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net3.ActiveCfg = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net3.Build.0 = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net4.ActiveCfg = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net4.Build.0 = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net3.ActiveCfg = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net3.Build.0 = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net4.ActiveCfg = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net4.Build.0 = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net3.ActiveCfg = Debug|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net3.Build.0 = Debug|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net4.ActiveCfg = Debug|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net4.Build.0 = Debug|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net3.ActiveCfg = Debug|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net3.Build.0 = Debug|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net4.ActiveCfg = Debug|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net4.Build.0 = Debug|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net3.ActiveCfg = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net3.Build.0 = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net4.ActiveCfg = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net4.Build.0 = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net3.ActiveCfg = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net3.Build.0 = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net4.ActiveCfg = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net4.Build.0 = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net3.ActiveCfg = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net3.Build.0 = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net4.ActiveCfg = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net4.Build.0 = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net3.ActiveCfg = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net3.Build.0 = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net4.ActiveCfg = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net4.Build.0 = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net3.ActiveCfg = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net3.Build.0 = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net4.ActiveCfg = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net4.Build.0 = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net3.ActiveCfg = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net3.Build.0 = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net4.ActiveCfg = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net4.Build.0 = Release|Net4 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/IPA.Injector/IPA.Injector.csproj b/IPA.Injector/IPA.Injector.csproj index ce6b687c..fe606dd8 100644 --- a/IPA.Injector/IPA.Injector.csproj +++ b/IPA.Injector/IPA.Injector.csproj @@ -14,9 +14,6 @@ true $(SolutionDir)=C:\ portable - false - true - net461;net35 8.0 true diff --git a/IPA.Loader/IPA.Loader.csproj b/IPA.Loader/IPA.Loader.csproj index c5b0d59e..36c18f88 100644 --- a/IPA.Loader/IPA.Loader.csproj +++ b/IPA.Loader/IPA.Loader.csproj @@ -14,9 +14,6 @@ true $(SolutionDir)=C:\ portable - false - true - net461;net35 8.0 true CA1031 From 3f2de16fad1bdbfec18976eb23f2511144bc1dfd Mon Sep 17 00:00:00 2001 From: Zingabopp Date: Fri, 24 Jul 2020 19:58:56 -0500 Subject: [PATCH 04/22] Fixed project dependencies --- BSIPA.sln | 142 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 74 insertions(+), 68 deletions(-) diff --git a/BSIPA.sln b/BSIPA.sln index dffc04de..ae68f0d0 100644 --- a/BSIPA.sln +++ b/BSIPA.sln @@ -9,6 +9,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IPA", "IPA\IPA.csproj", "{1 {2A1AF16B-27F1-46E0-9A95-181516BC1CB7} = {2A1AF16B-27F1-46E0-9A95-181516BC1CB7} EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IPA.Loader", "IPA.Loader\IPA.Loader.csproj", "{5AD344F0-01A0-4CA8-92E5-9D095737744D}" + ProjectSection(ProjectDependencies) = postProject + {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} = {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IPA.Injector", "IPA.Injector\IPA.Injector.csproj", "{2A1AF16B-27F1-46E0-9A95-181516BC1CB7}" + ProjectSection(ProjectDependencies) = postProject + {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} = {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} + EndProjectSection +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "proxy", "Doorstop\Proxy\Proxy.vcxproj", "{88609E16-731F-46C9-8139-6B1A7A83240D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{C79C2C3A-A7FC-40D6-A5CC-9752A661AFA9}" @@ -35,10 +45,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BSIPA-Meta", "BSIPA-Meta\BS EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Net3-Proxy", "Net3-Proxy\Net3-Proxy.csproj", "{642F52DA-90F9-40E3-8784-6964F36752FB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IPA.Loader", "IPA.Loader\IPA.Loader.csproj", "{5AD344F0-01A0-4CA8-92E5-9D095737744D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IPA.Injector", "IPA.Injector\IPA.Injector.csproj", "{2A1AF16B-27F1-46E0-9A95-181516BC1CB7}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64-Net3 = Debug|x64-Net3 @@ -91,6 +97,70 @@ Global {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x86-Net3.Build.0 = Verbose|Any CPU {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x86-Net4.ActiveCfg = Verbose|Any CPU {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x86-Net4.Build.0 = Verbose|Any CPU + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net3.ActiveCfg = Debug|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net3.Build.0 = Debug|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net4.ActiveCfg = Debug|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net4.Build.0 = Debug|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net3.ActiveCfg = Debug|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net3.Build.0 = Debug|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net4.ActiveCfg = Debug|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net4.Build.0 = Debug|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net3.ActiveCfg = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net3.Build.0 = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net4.ActiveCfg = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net4.Build.0 = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net3.ActiveCfg = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net3.Build.0 = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net4.ActiveCfg = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net4.Build.0 = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net3.ActiveCfg = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net3.Build.0 = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net4.ActiveCfg = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net4.Build.0 = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net3.ActiveCfg = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net3.Build.0 = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net4.ActiveCfg = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net4.Build.0 = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net3.ActiveCfg = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net3.Build.0 = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net4.ActiveCfg = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net4.Build.0 = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net3.ActiveCfg = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net3.Build.0 = Release|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net4.ActiveCfg = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net4.Build.0 = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net3.ActiveCfg = Debug|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net3.Build.0 = Debug|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net4.ActiveCfg = Debug|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net4.Build.0 = Debug|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net3.ActiveCfg = Debug|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net3.Build.0 = Debug|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net4.ActiveCfg = Debug|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net4.Build.0 = Debug|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net3.ActiveCfg = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net3.Build.0 = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net4.ActiveCfg = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net4.Build.0 = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net3.ActiveCfg = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net3.Build.0 = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net4.ActiveCfg = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net4.Build.0 = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net3.ActiveCfg = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net3.Build.0 = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net4.ActiveCfg = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net4.Build.0 = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net3.ActiveCfg = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net3.Build.0 = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net4.ActiveCfg = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net4.Build.0 = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net3.ActiveCfg = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net3.Build.0 = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net4.ActiveCfg = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net4.Build.0 = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net3.ActiveCfg = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net3.Build.0 = Release|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net4.ActiveCfg = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net4.Build.0 = Release|Net4 {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x64-Net3.ActiveCfg = Release|x64 {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x64-Net3.Build.0 = Release|x64 {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x64-Net4.ActiveCfg = Release|x64 @@ -199,70 +269,6 @@ Global {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose|x86-Net3.ActiveCfg = Release|Any CPU {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose|x86-Net3.Build.0 = Release|Any CPU {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose|x86-Net4.ActiveCfg = Release|Any CPU - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net3.ActiveCfg = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net3.Build.0 = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net4.ActiveCfg = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net4.Build.0 = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net3.ActiveCfg = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net3.Build.0 = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net4.ActiveCfg = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net4.Build.0 = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net3.ActiveCfg = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net3.Build.0 = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net4.ActiveCfg = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net4.Build.0 = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net3.ActiveCfg = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net3.Build.0 = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net4.ActiveCfg = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net4.Build.0 = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net3.ActiveCfg = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net3.Build.0 = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net4.ActiveCfg = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net4.Build.0 = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net3.ActiveCfg = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net3.Build.0 = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net4.ActiveCfg = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net4.Build.0 = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net3.ActiveCfg = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net3.Build.0 = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net4.ActiveCfg = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net4.Build.0 = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net3.ActiveCfg = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net3.Build.0 = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net4.ActiveCfg = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net4.Build.0 = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net3.ActiveCfg = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net3.Build.0 = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net4.ActiveCfg = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net4.Build.0 = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net3.ActiveCfg = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net3.Build.0 = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net4.ActiveCfg = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net4.Build.0 = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net3.ActiveCfg = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net3.Build.0 = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net4.ActiveCfg = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net4.Build.0 = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net3.ActiveCfg = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net3.Build.0 = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net4.ActiveCfg = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net4.Build.0 = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net3.ActiveCfg = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net3.Build.0 = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net4.ActiveCfg = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net4.Build.0 = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net3.ActiveCfg = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net3.Build.0 = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net4.ActiveCfg = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net4.Build.0 = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net3.ActiveCfg = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net3.Build.0 = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net4.ActiveCfg = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net4.Build.0 = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net3.ActiveCfg = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net3.Build.0 = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net4.ActiveCfg = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net4.Build.0 = Release|Net4 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From f82a52d139079bff46aeb3102872803060eef1a5 Mon Sep 17 00:00:00 2001 From: Zingabopp Date: Fri, 24 Jul 2020 20:04:28 -0500 Subject: [PATCH 05/22] Verbose configs --- BSIPA.sln | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/BSIPA.sln b/BSIPA.sln index ae68f0d0..04b929ad 100644 --- a/BSIPA.sln +++ b/BSIPA.sln @@ -121,14 +121,14 @@ Global {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net3.Build.0 = Release|Net3 {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net4.ActiveCfg = Release|Net4 {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net4.Build.0 = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net3.ActiveCfg = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net3.Build.0 = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net4.ActiveCfg = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net4.Build.0 = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net3.ActiveCfg = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net3.Build.0 = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net4.ActiveCfg = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net4.Build.0 = Release|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net3.ActiveCfg = Debug|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net3.Build.0 = Debug|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net4.ActiveCfg = Debug|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net4.Build.0 = Debug|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net3.ActiveCfg = Debug|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net3.Build.0 = Debug|Net3 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net4.ActiveCfg = Debug|Net4 + {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net4.Build.0 = Debug|Net4 {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net3.ActiveCfg = Debug|Net3 {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net3.Build.0 = Debug|Net3 {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net4.ActiveCfg = Debug|Net4 @@ -153,14 +153,14 @@ Global {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net3.Build.0 = Release|Net3 {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net4.ActiveCfg = Release|Net4 {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net4.Build.0 = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net3.ActiveCfg = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net3.Build.0 = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net4.ActiveCfg = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net4.Build.0 = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net3.ActiveCfg = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net3.Build.0 = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net4.ActiveCfg = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net4.Build.0 = Release|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net3.ActiveCfg = Debug|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net3.Build.0 = Debug|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net4.ActiveCfg = Debug|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net4.Build.0 = Debug|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net3.ActiveCfg = Debug|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net3.Build.0 = Debug|Net3 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net4.ActiveCfg = Debug|Net4 + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net4.Build.0 = Debug|Net4 {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x64-Net3.ActiveCfg = Release|x64 {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x64-Net3.Build.0 = Release|x64 {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x64-Net4.ActiveCfg = Release|x64 From cbad14a10a220e648f06c6d7dca69a51cbc42fcf Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Mon, 17 Aug 2020 16:46:51 -0500 Subject: [PATCH 06/22] Began transition to SDK-style projects --- BSIPA.sln | 362 ++++++++--------------- IPA.Injector/IPA.Injector.csproj | 258 +++++++--------- IPA.Injector/IPA.Injector_old.csproj | 152 ++++++++++ IPA.Loader/IPA.Loader.csproj | 196 ++---------- IPA.Loader/IPA.Loader_old.csproj | 209 +++++++++++++ IPA.Loader/Thumbs.db | Bin 22528 -> 0 bytes IPA.Loader/Utilities/Async/Coroutines.cs | 10 +- IPA.Loader/Utilities/CriticalSection.cs | 360 +++++++++++----------- Net3-Proxy/Net3-Proxy.csproj | 69 +---- Net3-Proxy/Net3-Proxy_old.csproj | 66 +++++ 10 files changed, 886 insertions(+), 796 deletions(-) create mode 100644 IPA.Injector/IPA.Injector_old.csproj create mode 100644 IPA.Loader/IPA.Loader_old.csproj delete mode 100644 IPA.Loader/Thumbs.db create mode 100644 Net3-Proxy/Net3-Proxy_old.csproj diff --git a/BSIPA.sln b/BSIPA.sln index 04b929ad..69a07b7b 100644 --- a/BSIPA.sln +++ b/BSIPA.sln @@ -6,17 +6,7 @@ MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IPA", "IPA\IPA.csproj", "{14092533-98BB-40A4-9AFC-27BB75672A70}" ProjectSection(ProjectDependencies) = postProject {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} = {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7} = {2A1AF16B-27F1-46E0-9A95-181516BC1CB7} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IPA.Loader", "IPA.Loader\IPA.Loader.csproj", "{5AD344F0-01A0-4CA8-92E5-9D095737744D}" - ProjectSection(ProjectDependencies) = postProject - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} = {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IPA.Injector", "IPA.Injector\IPA.Injector.csproj", "{2A1AF16B-27F1-46E0-9A95-181516BC1CB7}" - ProjectSection(ProjectDependencies) = postProject - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} = {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C} = {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "proxy", "Doorstop\Proxy\Proxy.vcxproj", "{88609E16-731F-46C9-8139-6B1A7A83240D}" @@ -40,235 +30,141 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BSIPA-Meta", "BSIPA-Meta\BS ProjectSection(ProjectDependencies) = postProject {88609E16-731F-46C9-8139-6B1A7A83240D} = {88609E16-731F-46C9-8139-6B1A7A83240D} {14092533-98BB-40A4-9AFC-27BB75672A70} = {14092533-98BB-40A4-9AFC-27BB75672A70} - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7} = {2A1AF16B-27F1-46E0-9A95-181516BC1CB7} + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C} = {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C} + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IPA.Injector", "IPA.Injector\IPA.Injector.csproj", "{10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}" + ProjectSection(ProjectDependencies) = postProject + {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} = {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IPA.Loader", "IPA.Loader\IPA.Loader.csproj", "{BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}" + ProjectSection(ProjectDependencies) = postProject + {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} = {5F33B310-DC8D-4C0D-877E-BAC3908DE10F} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Net3-Proxy", "Net3-Proxy\Net3-Proxy.csproj", "{642F52DA-90F9-40E3-8784-6964F36752FB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Net3-Proxy", "Net3-Proxy\Net3-Proxy.csproj", "{0DEDB099-9A26-4069-A4C1-A76CEB16283B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64-Net3 = Debug|x64-Net3 - Debug|x64-Net4 = Debug|x64-Net4 - Debug|x86-Net3 = Debug|x86-Net3 - Debug|x86-Net4 = Debug|x86-Net4 - Release|x64-Net3 = Release|x64-Net3 - Release|x64-Net4 = Release|x64-Net4 - Release|x86-Net3 = Release|x86-Net3 - Release|x86-Net4 = Release|x86-Net4 - Verbose_Release|x64-Net3 = Verbose_Release|x64-Net3 - Verbose_Release|x64-Net4 = Verbose_Release|x64-Net4 - Verbose_Release|x86-Net3 = Verbose_Release|x86-Net3 - Verbose_Release|x86-Net4 = Verbose_Release|x86-Net4 - Verbose|x64-Net3 = Verbose|x64-Net3 - Verbose|x64-Net4 = Verbose|x64-Net4 - Verbose|x86-Net3 = Verbose|x86-Net3 - Verbose|x86-Net4 = Verbose|x86-Net4 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + Verbose_Release|x64 = Verbose_Release|x64 + Verbose_Release|x86 = Verbose_Release|x86 + Verbose|x64 = Verbose|x64 + Verbose|x86 = Verbose|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {14092533-98BB-40A4-9AFC-27BB75672A70}.Debug|x64-Net3.ActiveCfg = Debug|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Debug|x64-Net3.Build.0 = Debug|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Debug|x64-Net4.ActiveCfg = Debug|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Debug|x64-Net4.Build.0 = Debug|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Debug|x86-Net3.ActiveCfg = Debug|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Debug|x86-Net3.Build.0 = Debug|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Debug|x86-Net4.ActiveCfg = Debug|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Debug|x86-Net4.Build.0 = Debug|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Release|x64-Net3.ActiveCfg = Release|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Release|x64-Net3.Build.0 = Release|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Release|x64-Net4.ActiveCfg = Release|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Release|x64-Net4.Build.0 = Release|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Release|x86-Net3.ActiveCfg = Release|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Release|x86-Net3.Build.0 = Release|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Release|x86-Net4.ActiveCfg = Release|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Release|x86-Net4.Build.0 = Release|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose_Release|x64-Net3.ActiveCfg = Verbose_Release|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose_Release|x64-Net3.Build.0 = Verbose_Release|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose_Release|x64-Net4.ActiveCfg = Verbose_Release|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose_Release|x64-Net4.Build.0 = Verbose_Release|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose_Release|x86-Net3.ActiveCfg = Verbose_Release|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose_Release|x86-Net3.Build.0 = Verbose_Release|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose_Release|x86-Net4.ActiveCfg = Verbose_Release|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose_Release|x86-Net4.Build.0 = Verbose_Release|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x64-Net3.ActiveCfg = Verbose|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x64-Net3.Build.0 = Verbose|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x64-Net4.ActiveCfg = Verbose|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x64-Net4.Build.0 = Verbose|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x86-Net3.ActiveCfg = Verbose|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x86-Net3.Build.0 = Verbose|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x86-Net4.ActiveCfg = Verbose|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x86-Net4.Build.0 = Verbose|Any CPU - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net3.ActiveCfg = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net3.Build.0 = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net4.ActiveCfg = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x64-Net4.Build.0 = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net3.ActiveCfg = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net3.Build.0 = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net4.ActiveCfg = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Debug|x86-Net4.Build.0 = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net3.ActiveCfg = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net3.Build.0 = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net4.ActiveCfg = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x64-Net4.Build.0 = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net3.ActiveCfg = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net3.Build.0 = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net4.ActiveCfg = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Release|x86-Net4.Build.0 = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net3.ActiveCfg = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net3.Build.0 = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net4.ActiveCfg = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x64-Net4.Build.0 = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net3.ActiveCfg = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net3.Build.0 = Release|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net4.ActiveCfg = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose_Release|x86-Net4.Build.0 = Release|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net3.ActiveCfg = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net3.Build.0 = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net4.ActiveCfg = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net4.Build.0 = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net3.ActiveCfg = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net3.Build.0 = Debug|Net3 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net4.ActiveCfg = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net4.Build.0 = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net3.ActiveCfg = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net3.Build.0 = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net4.ActiveCfg = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x64-Net4.Build.0 = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net3.ActiveCfg = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net3.Build.0 = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net4.ActiveCfg = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Debug|x86-Net4.Build.0 = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net3.ActiveCfg = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net3.Build.0 = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net4.ActiveCfg = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x64-Net4.Build.0 = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net3.ActiveCfg = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net3.Build.0 = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net4.ActiveCfg = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Release|x86-Net4.Build.0 = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net3.ActiveCfg = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net3.Build.0 = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net4.ActiveCfg = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x64-Net4.Build.0 = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net3.ActiveCfg = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net3.Build.0 = Release|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net4.ActiveCfg = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose_Release|x86-Net4.Build.0 = Release|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net3.ActiveCfg = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net3.Build.0 = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net4.ActiveCfg = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net4.Build.0 = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net3.ActiveCfg = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net3.Build.0 = Debug|Net3 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net4.ActiveCfg = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net4.Build.0 = Debug|Net4 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x64-Net3.ActiveCfg = Release|x64 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x64-Net3.Build.0 = Release|x64 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x64-Net4.ActiveCfg = Release|x64 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x64-Net4.Build.0 = Release|x64 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x86-Net3.ActiveCfg = Release|Win32 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x86-Net3.Build.0 = Release|Win32 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x86-Net4.ActiveCfg = Release|Win32 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x86-Net4.Build.0 = Release|Win32 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Release|x64-Net3.ActiveCfg = Release|x64 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Release|x64-Net3.Build.0 = Release|x64 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Release|x64-Net4.ActiveCfg = Release|x64 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Release|x64-Net4.Build.0 = Release|x64 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Release|x86-Net3.ActiveCfg = Release|Win32 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Release|x86-Net3.Build.0 = Release|Win32 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Release|x86-Net4.ActiveCfg = Release|Win32 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Release|x86-Net4.Build.0 = Release|Win32 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose_Release|x64-Net3.ActiveCfg = Verbose_Release|x64 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose_Release|x64-Net3.Build.0 = Verbose_Release|x64 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose_Release|x64-Net4.ActiveCfg = Verbose_Release|x64 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose_Release|x64-Net4.Build.0 = Verbose_Release|x64 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose_Release|x86-Net3.ActiveCfg = Verbose_Release|Win32 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose_Release|x86-Net3.Build.0 = Verbose_Release|Win32 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose_Release|x86-Net4.ActiveCfg = Verbose_Release|Win32 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose_Release|x86-Net4.Build.0 = Verbose_Release|Win32 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose|x64-Net3.ActiveCfg = Verbose_Release|x64 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose|x64-Net3.Build.0 = Verbose_Release|x64 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose|x64-Net4.ActiveCfg = Verbose_Release|x64 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose|x64-Net4.Build.0 = Verbose_Release|x64 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose|x86-Net3.ActiveCfg = Verbose_Release|Win32 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose|x86-Net3.Build.0 = Verbose_Release|Win32 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose|x86-Net4.ActiveCfg = Verbose_Release|Win32 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose|x86-Net4.Build.0 = Verbose_Release|Win32 - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Debug|x64-Net3.ActiveCfg = Debug|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Debug|x64-Net4.ActiveCfg = Debug|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Debug|x86-Net3.ActiveCfg = Debug|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Debug|x86-Net4.ActiveCfg = Debug|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Release|x64-Net3.ActiveCfg = Release|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Release|x64-Net4.ActiveCfg = Release|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Release|x86-Net3.ActiveCfg = Release|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Release|x86-Net4.ActiveCfg = Release|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose_Release|x64-Net3.ActiveCfg = Release|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose_Release|x64-Net4.ActiveCfg = Release|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose_Release|x86-Net3.ActiveCfg = Release|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose_Release|x86-Net4.ActiveCfg = Release|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose|x64-Net3.ActiveCfg = Debug|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose|x64-Net3.Build.0 = Debug|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose|x64-Net4.ActiveCfg = Debug|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose|x64-Net4.Build.0 = Debug|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose|x86-Net3.ActiveCfg = Debug|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose|x86-Net3.Build.0 = Debug|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose|x86-Net4.ActiveCfg = Debug|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose|x86-Net4.Build.0 = Debug|Any CPU - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x64-Net3.ActiveCfg = Debug|x64-Net3 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x64-Net3.Build.0 = Debug|x64-Net3 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x64-Net4.ActiveCfg = Debug|x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x64-Net4.Build.0 = Debug|x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x86-Net3.ActiveCfg = Debug|x86-Net3 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x86-Net3.Build.0 = Debug|x86-Net3 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x86-Net4.ActiveCfg = Debug|x86-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x86-Net4.Build.0 = Debug|x86-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x64-Net3.ActiveCfg = Release|x64-Net3 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x64-Net3.Build.0 = Release|x64-Net3 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x64-Net4.ActiveCfg = Release|x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x64-Net4.Build.0 = Release|x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x86-Net3.ActiveCfg = Release|x86-Net3 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x86-Net3.Build.0 = Release|x86-Net3 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x86-Net4.ActiveCfg = Release|x86-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x86-Net4.Build.0 = Release|x86-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x64-Net3.ActiveCfg = Verbose_Release|x64-Net3 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x64-Net3.Build.0 = Verbose_Release|x64-Net3 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x64-Net4.ActiveCfg = Verbose_Release|x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x64-Net4.Build.0 = Verbose_Release|x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x86-Net3.ActiveCfg = Verbose_Release|x86-Net3 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x86-Net3.Build.0 = Verbose_Release|x86-Net3 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x86-Net4.ActiveCfg = Verbose_Release|x86-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x86-Net4.Build.0 = Verbose_Release|x86-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x64-Net3.ActiveCfg = Verbose|x64-Net3 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x64-Net3.Build.0 = Verbose|x64-Net3 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x64-Net4.ActiveCfg = Verbose|x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x64-Net4.Build.0 = Verbose|x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x86-Net3.ActiveCfg = Verbose|x86-Net3 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x86-Net3.Build.0 = Verbose|x86-Net3 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x86-Net4.ActiveCfg = Verbose|x86-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x86-Net4.Build.0 = Verbose|x86-Net4 - {642F52DA-90F9-40E3-8784-6964F36752FB}.Debug|x64-Net3.ActiveCfg = Debug|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Debug|x64-Net3.Build.0 = Debug|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Debug|x64-Net4.ActiveCfg = Debug|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Debug|x86-Net3.ActiveCfg = Debug|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Debug|x86-Net3.Build.0 = Debug|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Debug|x86-Net4.ActiveCfg = Debug|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Release|x64-Net3.ActiveCfg = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Release|x64-Net3.Build.0 = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Release|x64-Net4.ActiveCfg = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Release|x86-Net3.ActiveCfg = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Release|x86-Net3.Build.0 = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Release|x86-Net4.ActiveCfg = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose_Release|x64-Net3.ActiveCfg = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose_Release|x64-Net3.Build.0 = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose_Release|x64-Net4.ActiveCfg = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose_Release|x86-Net3.ActiveCfg = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose_Release|x86-Net3.Build.0 = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose_Release|x86-Net4.ActiveCfg = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose|x64-Net3.ActiveCfg = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose|x64-Net3.Build.0 = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose|x64-Net4.ActiveCfg = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose|x86-Net3.ActiveCfg = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose|x86-Net3.Build.0 = Release|Any CPU - {642F52DA-90F9-40E3-8784-6964F36752FB}.Verbose|x86-Net4.ActiveCfg = Release|Any CPU + {14092533-98BB-40A4-9AFC-27BB75672A70}.Debug|x64.ActiveCfg = Debug|Any CPU + {14092533-98BB-40A4-9AFC-27BB75672A70}.Debug|x64.Build.0 = Debug|Any CPU + {14092533-98BB-40A4-9AFC-27BB75672A70}.Debug|x86.ActiveCfg = Debug|Any CPU + {14092533-98BB-40A4-9AFC-27BB75672A70}.Debug|x86.Build.0 = Debug|Any CPU + {14092533-98BB-40A4-9AFC-27BB75672A70}.Release|x64.ActiveCfg = Release|Any CPU + {14092533-98BB-40A4-9AFC-27BB75672A70}.Release|x64.Build.0 = Release|Any CPU + {14092533-98BB-40A4-9AFC-27BB75672A70}.Release|x86.ActiveCfg = Release|Any CPU + {14092533-98BB-40A4-9AFC-27BB75672A70}.Release|x86.Build.0 = Release|Any CPU + {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose_Release|x64.ActiveCfg = Verbose_Release|Any CPU + {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose_Release|x64.Build.0 = Verbose_Release|Any CPU + {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose_Release|x86.ActiveCfg = Verbose_Release|Any CPU + {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose_Release|x86.Build.0 = Verbose_Release|Any CPU + {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x64.ActiveCfg = Verbose|Any CPU + {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x64.Build.0 = Verbose|Any CPU + {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x86.ActiveCfg = Verbose|Any CPU + {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x86.Build.0 = Verbose|Any CPU + {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x64.ActiveCfg = Release|x64 + {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x64.Build.0 = Release|x64 + {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x86.ActiveCfg = Release|Win32 + {88609E16-731F-46C9-8139-6B1A7A83240D}.Debug|x86.Build.0 = Release|Win32 + {88609E16-731F-46C9-8139-6B1A7A83240D}.Release|x64.ActiveCfg = Release|x64 + {88609E16-731F-46C9-8139-6B1A7A83240D}.Release|x64.Build.0 = Release|x64 + {88609E16-731F-46C9-8139-6B1A7A83240D}.Release|x86.ActiveCfg = Release|Win32 + {88609E16-731F-46C9-8139-6B1A7A83240D}.Release|x86.Build.0 = Release|Win32 + {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose_Release|x64.ActiveCfg = Verbose_Release|x64 + {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose_Release|x64.Build.0 = Verbose_Release|x64 + {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose_Release|x86.ActiveCfg = Verbose_Release|Win32 + {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose_Release|x86.Build.0 = Verbose_Release|Win32 + {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose|x64.ActiveCfg = Verbose_Release|x64 + {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose|x64.Build.0 = Verbose_Release|x64 + {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose|x86.ActiveCfg = Verbose_Release|Win32 + {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose|x86.Build.0 = Verbose_Release|Win32 + {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Debug|x64.ActiveCfg = Debug|Any CPU + {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Debug|x64.Build.0 = Debug|Any CPU + {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Debug|x86.ActiveCfg = Debug|Any CPU + {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Debug|x86.Build.0 = Debug|Any CPU + {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Release|x64.ActiveCfg = Release|Any CPU + {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Release|x86.ActiveCfg = Release|Any CPU + {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose_Release|x64.ActiveCfg = Release|Any CPU + {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose_Release|x86.ActiveCfg = Release|Any CPU + {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose|x64.ActiveCfg = Debug|Any CPU + {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose|x64.Build.0 = Debug|Any CPU + {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose|x86.ActiveCfg = Debug|Any CPU + {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose|x86.Build.0 = Debug|Any CPU + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x64.ActiveCfg = Debug|x64-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x64.Build.0 = Debug|x64-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x86.ActiveCfg = Debug|x86-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x86.Build.0 = Debug|x86-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x64.ActiveCfg = Release|x64-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x64.Build.0 = Release|x64-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x86.ActiveCfg = Release|x86-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x86.Build.0 = Release|x86-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x64.ActiveCfg = Verbose_Release|x64-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x64.Build.0 = Verbose_Release|x64-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x86.ActiveCfg = Verbose_Release|x86-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x86.Build.0 = Verbose_Release|x86-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x64.ActiveCfg = Verbose|x64-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x64.Build.0 = Verbose|x64-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x86.ActiveCfg = Verbose|x86-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x86.Build.0 = Verbose|x86-Net4 + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Debug|x64.ActiveCfg = Debug|Any CPU + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Debug|x64.Build.0 = Debug|Any CPU + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Debug|x86.ActiveCfg = Debug|Any CPU + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Debug|x86.Build.0 = Debug|Any CPU + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Release|x64.ActiveCfg = Release|Any CPU + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Release|x64.Build.0 = Release|Any CPU + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Release|x86.ActiveCfg = Release|Any CPU + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Release|x86.Build.0 = Release|Any CPU + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Verbose_Release|x64.ActiveCfg = Release|Any CPU + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Verbose_Release|x64.Build.0 = Release|Any CPU + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Verbose_Release|x86.ActiveCfg = Release|Any CPU + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Verbose_Release|x86.Build.0 = Release|Any CPU + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Verbose|x64.ActiveCfg = Debug|Any CPU + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Verbose|x64.Build.0 = Debug|Any CPU + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Verbose|x86.ActiveCfg = Debug|Any CPU + {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Verbose|x86.Build.0 = Debug|Any CPU + {BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}.Debug|x64.ActiveCfg = Debug|Any CPU + {BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}.Debug|x64.Build.0 = Debug|Any CPU + {BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}.Debug|x86.ActiveCfg = Debug|Any CPU + {BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}.Debug|x86.Build.0 = Debug|Any CPU + {BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}.Release|x64.ActiveCfg = Release|Any CPU + {BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}.Release|x64.Build.0 = Release|Any CPU + {BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}.Release|x86.ActiveCfg = Release|Any CPU + {BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}.Release|x86.Build.0 = Release|Any CPU + {BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}.Verbose_Release|x64.ActiveCfg = Release|Any CPU + {BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}.Verbose_Release|x64.Build.0 = Release|Any CPU + {BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}.Verbose_Release|x86.ActiveCfg = Release|Any CPU + {BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}.Verbose_Release|x86.Build.0 = Release|Any CPU + {BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}.Verbose|x64.ActiveCfg = Debug|Any CPU + {BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}.Verbose|x64.Build.0 = Debug|Any CPU + {BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}.Verbose|x86.ActiveCfg = Debug|Any CPU + {BBBA5CAD-B40E-4565-AE96-E8EC468DB54B}.Verbose|x86.Build.0 = Debug|Any CPU + {0DEDB099-9A26-4069-A4C1-A76CEB16283B}.Debug|x64.ActiveCfg = Debug|Any CPU + {0DEDB099-9A26-4069-A4C1-A76CEB16283B}.Debug|x64.Build.0 = Debug|Any CPU + {0DEDB099-9A26-4069-A4C1-A76CEB16283B}.Debug|x86.ActiveCfg = Debug|Any CPU + {0DEDB099-9A26-4069-A4C1-A76CEB16283B}.Debug|x86.Build.0 = Debug|Any CPU + {0DEDB099-9A26-4069-A4C1-A76CEB16283B}.Release|x64.ActiveCfg = Release|Any CPU + {0DEDB099-9A26-4069-A4C1-A76CEB16283B}.Release|x64.Build.0 = Release|Any CPU + {0DEDB099-9A26-4069-A4C1-A76CEB16283B}.Release|x86.ActiveCfg = Release|Any CPU + {0DEDB099-9A26-4069-A4C1-A76CEB16283B}.Release|x86.Build.0 = Release|Any CPU + {0DEDB099-9A26-4069-A4C1-A76CEB16283B}.Verbose_Release|x64.ActiveCfg = Release|Any CPU + {0DEDB099-9A26-4069-A4C1-A76CEB16283B}.Verbose_Release|x64.Build.0 = Release|Any CPU + {0DEDB099-9A26-4069-A4C1-A76CEB16283B}.Verbose_Release|x86.ActiveCfg = Release|Any CPU + {0DEDB099-9A26-4069-A4C1-A76CEB16283B}.Verbose_Release|x86.Build.0 = Release|Any CPU + {0DEDB099-9A26-4069-A4C1-A76CEB16283B}.Verbose|x64.ActiveCfg = Debug|Any CPU + {0DEDB099-9A26-4069-A4C1-A76CEB16283B}.Verbose|x64.Build.0 = Debug|Any CPU + {0DEDB099-9A26-4069-A4C1-A76CEB16283B}.Verbose|x86.ActiveCfg = Debug|Any CPU + {0DEDB099-9A26-4069-A4C1-A76CEB16283B}.Verbose|x86.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/IPA.Injector/IPA.Injector.csproj b/IPA.Injector/IPA.Injector.csproj index fe606dd8..537ac45d 100644 --- a/IPA.Injector/IPA.Injector.csproj +++ b/IPA.Injector/IPA.Injector.csproj @@ -1,152 +1,106 @@ - - - - - Debug - Net4 - true - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7} - Library - Properties - IPA.Injector - IPA.Injector - 512 - true - $(SolutionDir)=C:\ - portable - 8.0 - true - - - true - false - bin\$(Platform)\Debug\ - DEBUG;TRACE - prompt - 4 - - - true - bin\$(Platform)\Release\ - TRACE - prompt - 4 - - - v4.6.1 - $(DefineConstants);NET4 - - - v3.5 - $(DefineConstants);NET3 - - - $(DefineConstants);BeatSaber - - - - - - - - - - ..\Refs\UnityEngine.CoreModule.Net4.dll - False - - - ..\Refs\UnityEngine.CoreModule.Net3.dll - False - - - - - - - - - - - - - - - - - {5ad344f0-01a0-4ca8-92e5-9d095737744d} - IPA.Loader - - - {642F52DA-90F9-40E3-8784-6964F36752FB} - Net3-Proxy - - - - - Libraries\Mono\I18N.dll - Always - - - Libraries\Mono\I18N.West.dll - Always - - - Libraries\Mono\Microsoft.CSharp.dll - Always - - - Libraries\Mono\System.Runtime.Serialization.dll - Always - - - - - Libraries\Mono\I18N.dll - Always - - - Libraries\Mono\I18N.West.dll - Always - - - Libraries\Mono\System.Runtime.Serialization.dll - Always - - - - - 0.10.4 - - - 1.2.2 - - - 0.3.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + net461;net35 + IPA.Injector + + portable + 8.0 + true + CA1031 + false + false + true + + + + $(DefineConstants);NET4 + + + $(DefineConstants);NET3 + + + $(DefineConstants);BeatSaber + + + + + + + + + + ..\Refs\UnityEngine.CoreModule.Net4.dll + False + + + ..\Refs\UnityEngine.CoreModule.Net3.dll + False + + + + + + Libraries\Mono\I18N.dll + Always + + + Libraries\Mono\I18N.West.dll + Always + + + Libraries\Mono\Microsoft.CSharp.dll + Always + + + Libraries\Mono\System.Runtime.Serialization.dll + Always + + + + + Libraries\Mono\I18N.dll + Always + + + Libraries\Mono\I18N.West.dll + Always + + + Libraries\Mono\System.Runtime.Serialization.dll + Always + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IPA.Injector/IPA.Injector_old.csproj b/IPA.Injector/IPA.Injector_old.csproj new file mode 100644 index 00000000..fe606dd8 --- /dev/null +++ b/IPA.Injector/IPA.Injector_old.csproj @@ -0,0 +1,152 @@ + + + + + Debug + Net4 + true + {2A1AF16B-27F1-46E0-9A95-181516BC1CB7} + Library + Properties + IPA.Injector + IPA.Injector + 512 + true + $(SolutionDir)=C:\ + portable + 8.0 + true + + + true + false + bin\$(Platform)\Debug\ + DEBUG;TRACE + prompt + 4 + + + true + bin\$(Platform)\Release\ + TRACE + prompt + 4 + + + v4.6.1 + $(DefineConstants);NET4 + + + v3.5 + $(DefineConstants);NET3 + + + $(DefineConstants);BeatSaber + + + + + + + + + + ..\Refs\UnityEngine.CoreModule.Net4.dll + False + + + ..\Refs\UnityEngine.CoreModule.Net3.dll + False + + + + + + + + + + + + + + + + + {5ad344f0-01a0-4ca8-92e5-9d095737744d} + IPA.Loader + + + {642F52DA-90F9-40E3-8784-6964F36752FB} + Net3-Proxy + + + + + Libraries\Mono\I18N.dll + Always + + + Libraries\Mono\I18N.West.dll + Always + + + Libraries\Mono\Microsoft.CSharp.dll + Always + + + Libraries\Mono\System.Runtime.Serialization.dll + Always + + + + + Libraries\Mono\I18N.dll + Always + + + Libraries\Mono\I18N.West.dll + Always + + + Libraries\Mono\System.Runtime.Serialization.dll + Always + + + + + 0.10.4 + + + 1.2.2 + + + 0.3.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IPA.Loader/IPA.Loader.csproj b/IPA.Loader/IPA.Loader.csproj index 36c18f88..2ccd3b90 100644 --- a/IPA.Loader/IPA.Loader.csproj +++ b/IPA.Loader/IPA.Loader.csproj @@ -1,65 +1,29 @@ - - - + + - Debug - Net4 - true - {5AD344F0-01A0-4CA8-92E5-9D095737744D} - Library - Properties + net461;net35 IPA - IPA.Loader - 512 - true - $(SolutionDir)=C:\ + portable 8.0 true CA1031 + true + false + true - - true - false - bin\$(Platform)\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - true - bin\$(Platform)\Release\ - TRACE - prompt - 4 - false - - - v4.6.1 + + $(DefineConstants);NET4 - - v3.5 + $(DefineConstants);NET3 - + $(DefineConstants);BeatSaber - - $(OutputPath)IPA.Loader.xml - - - - - - - - - - - - + + ..\Refs\UnityEngine.CoreModule.Net4.dll False @@ -69,7 +33,7 @@ False - + ..\Refs\UnityEngine.CoreModule.Net3.dll False @@ -79,131 +43,25 @@ False + - - {642F52DA-90F9-40E3-8784-6964F36752FB} - Net3-Proxy - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - 1.9.1.8 - - - 2.0.0.7 - - - 0.10.4 - - - 12.0.3 - - - 1.0.1 - - - 1.2.2 - - - 0.3.1 - + + + + + + + + - - - - - - \ No newline at end of file + + diff --git a/IPA.Loader/IPA.Loader_old.csproj b/IPA.Loader/IPA.Loader_old.csproj new file mode 100644 index 00000000..36c18f88 --- /dev/null +++ b/IPA.Loader/IPA.Loader_old.csproj @@ -0,0 +1,209 @@ + + + + + Debug + Net4 + true + {5AD344F0-01A0-4CA8-92E5-9D095737744D} + Library + Properties + IPA + IPA.Loader + 512 + true + $(SolutionDir)=C:\ + portable + 8.0 + true + CA1031 + + + true + false + bin\$(Platform)\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + true + bin\$(Platform)\Release\ + TRACE + prompt + 4 + false + + + v4.6.1 + $(DefineConstants);NET4 + + + v3.5 + $(DefineConstants);NET3 + + + $(DefineConstants);BeatSaber + + + $(OutputPath)IPA.Loader.xml + + + + + + + + + + + + + + ..\Refs\UnityEngine.CoreModule.Net4.dll + False + + + ..\Refs\UnityEngine.UnityWebRequestModule.Net4.dll + False + + + + + ..\Refs\UnityEngine.CoreModule.Net3.dll + False + + + ..\Refs\UnityEngine.UnityWebRequestModule.Net3.dll + False + + + + + {642F52DA-90F9-40E3-8784-6964F36752FB} + Net3-Proxy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.9.1.8 + + + 2.0.0.7 + + + 0.10.4 + + + 12.0.3 + + + 1.0.1 + + + 1.2.2 + + + 0.3.1 + + + + + + + + + + + + + \ No newline at end of file diff --git a/IPA.Loader/Thumbs.db b/IPA.Loader/Thumbs.db deleted file mode 100644 index 25f19c79d3783635570e4208a5f15339f3a90754..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22528 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 z 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 AsTask(coroutine)).Unwrap(); - var tcs = new TaskCompletionSource(coroutine, TaskCreationOptions.RunContinuationsAsynchronously); + var tcs = new TaskCompletionSource(coroutine, AsTaskSourceOptions); PluginComponent.Instance.StartCoroutine(new AsTaskCoroutineExecutor(coroutine, tcs)); return tcs.Task; } +#if NET4 + private static readonly TaskCreationOptions AsTaskSourceOptions = TaskCreationOptions.RunContinuationsAsynchronously; +#else + private static readonly TaskCreationOptions AsTaskSourceOptions = TaskCreationOptions.None; +#endif + private struct VoidStruct { } private class ExceptionLocation : Exception { public ExceptionLocation(IEnumerable locations) - : base(string.Join("\n", locations.Select(s => "in " + s))) + : base(string.Join("\n", Utils.StrJP(locations.Select(s => "in " + s)))) { } } diff --git a/IPA.Loader/Utilities/CriticalSection.cs b/IPA.Loader/Utilities/CriticalSection.cs index 60930b50..c5ed1029 100644 --- a/IPA.Loader/Utilities/CriticalSection.cs +++ b/IPA.Loader/Utilities/CriticalSection.cs @@ -1,185 +1,185 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; -using IPA.Logging; - -namespace IPA.Utilities -{ - /// - /// Provides utilities for managing various critical sections. - /// - public static class CriticalSection - { - - internal static void Configure() - { - Logger.log.Debug("Configuring exit handlers"); - - ResetExitHandlers(); - } - - private static void Reset(object sender, EventArgs e) - { - Win32.SetConsoleCtrlHandler(registeredHandler, false); - WinHttp.SetPeekMessageHook(null); - } - - #region Execute section - - private static readonly Win32.ConsoleCtrlDelegate registeredHandler = HandleExit; - internal static void ResetExitHandlers() - { - Win32.SetConsoleCtrlHandler(registeredHandler, false); - Win32.SetConsoleCtrlHandler(registeredHandler, true); - WinHttp.SetPeekMessageHook(PeekMessageHook); - - AppDomain.CurrentDomain.ProcessExit -= OnProcessExit; - AppDomain.CurrentDomain.ProcessExit += OnProcessExit; - } - +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using IPA.Logging; + +namespace IPA.Utilities +{ + /// + /// Provides utilities for managing various critical sections. + /// + public static class CriticalSection + { + + internal static void Configure() + { + Logger.log.Debug("Configuring exit handlers"); + + ResetExitHandlers(); + } + + private static void Reset(object sender, EventArgs e) + { + Win32.SetConsoleCtrlHandler(registeredHandler, false); + WinHttp.SetPeekMessageHook(null); + } + + #region Execute section + + private static readonly Win32.ConsoleCtrlDelegate registeredHandler = HandleExit; + internal static void ResetExitHandlers() + { + Win32.SetConsoleCtrlHandler(registeredHandler, false); + Win32.SetConsoleCtrlHandler(registeredHandler, true); + WinHttp.SetPeekMessageHook(PeekMessageHook); + + AppDomain.CurrentDomain.ProcessExit -= OnProcessExit; + AppDomain.CurrentDomain.ProcessExit += OnProcessExit; + } + private static void OnProcessExit(object sender, EventArgs args) { WinHttp.SetIgnoreUnhandledExceptions(true); - } - - private static class WinHttp - { - public delegate bool PeekMessageHook( - bool isW, - uint result, - [MarshalAs(UnmanagedType.LPStruct)] - in Win32.MSG message, - IntPtr hwnd, - uint filterMin, - uint filterMax, - ref Win32.PeekMessageParams removeMsg); - - [DllImport("bsipa-doorstop")] - public static extern void SetPeekMessageHook( - [MarshalAs(UnmanagedType.FunctionPtr)] + } + + private static class WinHttp + { + public delegate bool PeekMessageHook( + bool isW, + uint result, + [MarshalAs(UnmanagedType.LPStruct)] + in Win32.MSG message, + IntPtr hwnd, + uint filterMin, + uint filterMax, + ref Win32.PeekMessageParams removeMsg); + + [DllImport("bsipa-doorstop")] + public static extern void SetPeekMessageHook( + [MarshalAs(UnmanagedType.FunctionPtr)] PeekMessageHook hook); - [DllImport("bsipa-doorstop")] - public static extern void SetIgnoreUnhandledExceptions( - [MarshalAs(UnmanagedType.Bool)] bool ignore); - } - - private static Win32.ConsoleCtrlDelegate _handler = null; - private static volatile bool isInExecuteSection = false; - - // returns true to continue looping and calling PeekMessage - private static bool PeekMessageHook( - bool isW, - uint result, - [MarshalAs(UnmanagedType.LPStruct)] - in Win32.MSG message, - IntPtr hwnd, - uint filterMin, - uint filterMax, - ref Win32.PeekMessageParams removeMsg) - { - if (isInExecuteSection) - { - if (result == 0) return false; - - switch (message.message) - { - case Win32.WM.CLOSE: - if (removeMsg != Win32.PeekMessageParams.PM_REMOVE) - { - removeMsg = Win32.PeekMessageParams.PM_REMOVE; - exitRecieved = true; - return true; - } - else - { - removeMsg = Win32.PeekMessageParams.PM_NOREMOVE; - return true; - } - - default: - return false; - } - } - - return false; - } - - private static bool HandleExit(Win32.CtrlTypes type) - { - if (_handler != null) - return _handler(type); - - return false; - } - - private static volatile bool exitRecieved = false; - - /// - /// A struct that allows using blocks to manage an execute section. - /// - public struct AutoExecuteSection : IDisposable - { - private readonly bool constructed; - internal AutoExecuteSection(bool val) - { - constructed = val && !isInExecuteSection; - if (constructed) - EnterExecuteSection(); - } - - void IDisposable.Dispose() - { - if (constructed) - ExitExecuteSection(); - } - } - - /// - /// Creates an for automated management of an execute section. - /// - /// the new that manages the section - public static AutoExecuteSection ExecuteSection() => new AutoExecuteSection(true); - - /// - /// Enters a critical execution section. Does not nest. - /// - /// - /// During a critical execution section, the program must execute until the end of the section before - /// exiting. If an exit signal is recieved during the section, it will be canceled, and the process - /// will terminate at the end of the section. - /// - public static void EnterExecuteSection() - { - ResetExitHandlers(); - - exitRecieved = false; - _handler = sig => exitRecieved = true; - isInExecuteSection = true; - } - - /// - /// Exits a critical execution section. Does not nest. - /// - /// - /// During a critical execution section, the program must execute until the end of the section before - /// exiting. If an exit signal is recieved during the section, it will be canceled, and the process - /// will terminate at the end of the section. - /// - public static void ExitExecuteSection() - { - _handler = null; - isInExecuteSection = false; - - Reset(null, null); - - if (exitRecieved) - Environment.Exit(1); - } - - #endregion - } -} + [DllImport("bsipa-doorstop")] + public static extern void SetIgnoreUnhandledExceptions( + [MarshalAs(UnmanagedType.Bool)] bool ignore); + } + + private static Win32.ConsoleCtrlDelegate _handler = null; + private static volatile bool isInExecuteSection = false; + + // returns true to continue looping and calling PeekMessage + private static bool PeekMessageHook( + bool isW, + uint result, + [MarshalAs(UnmanagedType.LPStruct)] + in Win32.MSG message, + IntPtr hwnd, + uint filterMin, + uint filterMax, + ref Win32.PeekMessageParams removeMsg) + { + if (isInExecuteSection) + { + if (result == 0) return false; + + switch (message.message) + { + case Win32.WM.CLOSE: + if (removeMsg != Win32.PeekMessageParams.PM_REMOVE) + { + removeMsg = Win32.PeekMessageParams.PM_REMOVE; + exitRecieved = true; + return true; + } + else + { + removeMsg = Win32.PeekMessageParams.PM_NOREMOVE; + return true; + } + + default: + return false; + } + } + + return false; + } + + private static bool HandleExit(Win32.CtrlTypes type) + { + if (_handler != null) + return _handler(type); + + return false; + } + + private static volatile bool exitRecieved = false; + + /// + /// A struct that allows using blocks to manage an execute section. + /// + public struct AutoExecuteSection : IDisposable + { + private readonly bool constructed; + internal AutoExecuteSection(bool val) + { + constructed = val && !isInExecuteSection; + if (constructed) + EnterExecuteSection(); + } + + void IDisposable.Dispose() + { + if (constructed) + ExitExecuteSection(); + } + } + + /// + /// Creates an for automated management of an execute section. + /// + /// the new that manages the section + public static AutoExecuteSection ExecuteSection() => new AutoExecuteSection(true); + + /// + /// Enters a critical execution section. Does not nest. + /// + /// + /// During a critical execution section, the program must execute until the end of the section before + /// exiting. If an exit signal is recieved during the section, it will be canceled, and the process + /// will terminate at the end of the section. + /// + public static void EnterExecuteSection() + { + ResetExitHandlers(); + + exitRecieved = false; + _handler = sig => exitRecieved = true; + isInExecuteSection = true; + } + + /// + /// Exits a critical execution section. Does not nest. + /// + /// + /// During a critical execution section, the program must execute until the end of the section before + /// exiting. If an exit signal is recieved during the section, it will be canceled, and the process + /// will terminate at the end of the section. + /// + public static void ExitExecuteSection() + { + _handler = null; + isInExecuteSection = false; + + Reset(null, null); + + if (exitRecieved) + Environment.Exit(1); + } + + #endregion + } +} diff --git a/Net3-Proxy/Net3-Proxy.csproj b/Net3-Proxy/Net3-Proxy.csproj index 7d2de56c..40e0a7c0 100644 --- a/Net3-Proxy/Net3-Proxy.csproj +++ b/Net3-Proxy/Net3-Proxy.csproj @@ -1,66 +1,15 @@ - - - + + - Debug - AnyCPU - {642F52DA-90F9-40E3-8784-6964F36752FB} - Library - Properties + net35 Net3_Proxy - Net3-Proxy - v3.5 - 512 - true - - - true - portable - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - portable - true - bin\Release\ - TRACE - prompt - 4 + false + - - - - - - - - - - - - - - - - - - - - - - - - - - 0.3.1 - - - 1.0.1 - + + - - \ No newline at end of file + + diff --git a/Net3-Proxy/Net3-Proxy_old.csproj b/Net3-Proxy/Net3-Proxy_old.csproj new file mode 100644 index 00000000..7d2de56c --- /dev/null +++ b/Net3-Proxy/Net3-Proxy_old.csproj @@ -0,0 +1,66 @@ + + + + + Debug + AnyCPU + {642F52DA-90F9-40E3-8784-6964F36752FB} + Library + Properties + Net3_Proxy + Net3-Proxy + v3.5 + 512 + true + + + true + portable + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + portable + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.3.1 + + + 1.0.1 + + + + \ No newline at end of file From 01c7191365e290618d9004ee042b02f328fcb3f7 Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Mon, 17 Aug 2020 17:00:40 -0500 Subject: [PATCH 07/22] Began move of BSIPA-Meta to SDK-style project --- BSIPA-Meta/BSIPA-Meta.csproj | 101 ++++++++-------------------- BSIPA-Meta/BSIPA-Meta_old.csproj | 110 +++++++++++++++++++++++++++++++ BSIPA.sln | 2 +- 3 files changed, 139 insertions(+), 74 deletions(-) create mode 100644 BSIPA-Meta/BSIPA-Meta_old.csproj diff --git a/BSIPA-Meta/BSIPA-Meta.csproj b/BSIPA-Meta/BSIPA-Meta.csproj index 3e2e4722..097f0a98 100644 --- a/BSIPA-Meta/BSIPA-Meta.csproj +++ b/BSIPA-Meta/BSIPA-Meta.csproj @@ -1,78 +1,31 @@ - - - + + - Debug - x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB} - Library + net35;net461 + x86;x64 + Debug;Release;Verbose;Verbose_Release + BSIPA_Meta - Meta Project - v4.6.1 - 512 - true - true - bin\$(Platform)\$(Configuration)\ - + false - - Win32 - - - x64 - - - Net4 - - - Net3 - - - AnyCPU - true - full - false - DEBUG;TRACE - prompt - 4 - Debug - Debug - Release - - - AnyCPU - pdbonly - true - TRACE - prompt - 4 - Release - Release + + + bin\$(Platform)\$(Configuration)\$(TargetFramework) + + false + true + + $(Configuration) + Debug + Release + Release + Verbose_Release + + Win32 + x64 - - AnyCPU - true - full - false - DEBUG;TRACE - prompt - 4 - Debug - Verbose - Verbose_Release - - - AnyCPU - pdbonly - true - TRACE - prompt - 4 - Release - Verbose_Release - Verbose_Release - + @@ -90,10 +43,11 @@ - + - + @@ -107,4 +61,5 @@ - \ No newline at end of file + + diff --git a/BSIPA-Meta/BSIPA-Meta_old.csproj b/BSIPA-Meta/BSIPA-Meta_old.csproj new file mode 100644 index 00000000..3e2e4722 --- /dev/null +++ b/BSIPA-Meta/BSIPA-Meta_old.csproj @@ -0,0 +1,110 @@ + + + + + Debug + x64-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB} + Library + BSIPA_Meta + Meta Project + v4.6.1 + 512 + true + true + bin\$(Platform)\$(Configuration)\ + + + + Win32 + + + x64 + + + Net4 + + + Net3 + + + AnyCPU + true + full + false + DEBUG;TRACE + prompt + 4 + Debug + Debug + Release + + + AnyCPU + pdbonly + true + TRACE + prompt + 4 + Release + Release + Release + + + AnyCPU + true + full + false + DEBUG;TRACE + prompt + 4 + Debug + Verbose + Verbose_Release + + + AnyCPU + pdbonly + true + TRACE + prompt + 4 + Release + Verbose_Release + Verbose_Release + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BSIPA.sln b/BSIPA.sln index 69a07b7b..e1d2621e 100644 --- a/BSIPA.sln +++ b/BSIPA.sln @@ -26,7 +26,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CollectDependencies", "BuildTools\CollectDependencies\CollectDependencies.csproj", "{5F33B310-DC8D-4C0D-877E-BAC3908DE10F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BSIPA-Meta", "BSIPA-Meta\BSIPA-Meta.csproj", "{880A3560-82CD-4836-996B-11BEFE6B44DB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BSIPA-Meta", "BSIPA-Meta\BSIPA-Meta.csproj", "{880A3560-82CD-4836-996B-11BEFE6B44DB}" ProjectSection(ProjectDependencies) = postProject {88609E16-731F-46C9-8139-6B1A7A83240D} = {88609E16-731F-46C9-8139-6B1A7A83240D} {14092533-98BB-40A4-9AFC-27BB75672A70} = {14092533-98BB-40A4-9AFC-27BB75672A70} From 7f3dec4d2f16a62085dfc795d063ede03c847a7e Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Mon, 17 Aug 2020 17:56:31 -0500 Subject: [PATCH 08/22] Fixed up BSIPA-Meta --- BSIPA-Meta/BSIPA-Meta.csproj | 21 +++++++++++++++++---- BSIPA.sln | 32 ++++++++++++++++---------------- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/BSIPA-Meta/BSIPA-Meta.csproj b/BSIPA-Meta/BSIPA-Meta.csproj index 097f0a98..b1404e5a 100644 --- a/BSIPA-Meta/BSIPA-Meta.csproj +++ b/BSIPA-Meta/BSIPA-Meta.csproj @@ -1,4 +1,4 @@ - + net35;net461 @@ -7,10 +7,14 @@ BSIPA_Meta false + true + + Assemble + Assemble - bin\$(Platform)\$(Configuration)\$(TargetFramework) + bin\$(Platform)\$(Configuration)\ false true @@ -26,6 +30,13 @@ x64 + + + + + + + @@ -39,12 +50,14 @@ + + + - + diff --git a/BSIPA.sln b/BSIPA.sln index e1d2621e..903c1e8a 100644 --- a/BSIPA.sln +++ b/BSIPA.sln @@ -101,22 +101,22 @@ Global {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose|x64.Build.0 = Debug|Any CPU {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose|x86.ActiveCfg = Debug|Any CPU {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose|x86.Build.0 = Debug|Any CPU - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x64.ActiveCfg = Debug|x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x64.Build.0 = Debug|x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x86.ActiveCfg = Debug|x86-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x86.Build.0 = Debug|x86-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x64.ActiveCfg = Release|x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x64.Build.0 = Release|x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x86.ActiveCfg = Release|x86-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x86.Build.0 = Release|x86-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x64.ActiveCfg = Verbose_Release|x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x64.Build.0 = Verbose_Release|x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x86.ActiveCfg = Verbose_Release|x86-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x86.Build.0 = Verbose_Release|x86-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x64.ActiveCfg = Verbose|x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x64.Build.0 = Verbose|x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x86.ActiveCfg = Verbose|x86-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x86.Build.0 = Verbose|x86-Net4 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x64.ActiveCfg = Debug|x64 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x64.Build.0 = Debug|x64 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x86.ActiveCfg = Debug|x86 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Debug|x86.Build.0 = Debug|x86 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x64.ActiveCfg = Release|x64 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x64.Build.0 = Release|x64 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x86.ActiveCfg = Release|x86 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Release|x86.Build.0 = Release|x86 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x64.ActiveCfg = Verbose_Release|x64 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x64.Build.0 = Verbose_Release|x64 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x86.ActiveCfg = Verbose_Release|x86 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose_Release|x86.Build.0 = Verbose_Release|x86 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x64.ActiveCfg = Verbose|x64 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x64.Build.0 = Verbose|x64 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x86.ActiveCfg = Verbose|x86 + {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x86.Build.0 = Verbose|x86 {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Debug|x64.ActiveCfg = Debug|Any CPU {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Debug|x64.Build.0 = Debug|Any CPU {10F0057C-6C1E-41AA-A4DE-2F9D2EABE55C}.Debug|x86.ActiveCfg = Debug|Any CPU From a02c1e05d53c69a17f076b09be59aa0b4e554635 Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Mon, 17 Aug 2020 18:23:30 -0500 Subject: [PATCH 09/22] Adjusted references in BSIPA-Meta.csproj --- BSIPA-Meta/BSIPA-Meta.csproj | 24 +++++----- Net3-Proxy/CompilerServices.cs | 82 +++++++++++++++++----------------- 2 files changed, 54 insertions(+), 52 deletions(-) diff --git a/BSIPA-Meta/BSIPA-Meta.csproj b/BSIPA-Meta/BSIPA-Meta.csproj index b1404e5a..b91fbb9b 100644 --- a/BSIPA-Meta/BSIPA-Meta.csproj +++ b/BSIPA-Meta/BSIPA-Meta.csproj @@ -31,25 +31,27 @@ - - - - + + + Configuration=$(NoVerboseConfig) + Platform=AnyCPU + + + Configuration=$(NoVerboseConfig) + Platform=AnyCPU + + + Configuration=$(ProxyConfig) + Platform=$(ProxyPlatform) + - - - - - - - diff --git a/Net3-Proxy/CompilerServices.cs b/Net3-Proxy/CompilerServices.cs index 5ef760f5..d721f4b3 100644 --- a/Net3-Proxy/CompilerServices.cs +++ b/Net3-Proxy/CompilerServices.cs @@ -1,15 +1,15 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace System.Runtime.CompilerServices -{ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace System.Runtime.CompilerServices +{ public sealed class ConditionalWeakTable where TKey : class where TValue : class - { - private readonly Dictionary, TValue> items = new Dictionary, TValue>(); - private readonly object _lock = new object(); - + { + private readonly Dictionary, TValue> items = new Dictionary, TValue>(); + private readonly object _lock = new object(); + private sealed class KeyComparer : IEqualityComparer> { public bool Equals(WeakReference x, WeakReference y) @@ -17,11 +17,11 @@ namespace System.Runtime.CompilerServices public int GetHashCode(WeakReference obj) => obj.TryGetTarget(out var key) ? key.GetHashCode() : 0; - } - - private static WeakReference WeakRef(TKey key) - => new WeakReference(key); - + } + + private static WeakReference WeakRef(TKey key) + => new WeakReference(key); + private sealed class GCTracker { public static event Action OnGC; @@ -32,11 +32,11 @@ namespace System.Runtime.CompilerServices if (!AppDomain.CurrentDomain.IsFinalizingForUnload() && !Environment.HasShutdownStarted) tracker.SetTarget(new GCTracker()); } - } - + } + public void Add(TKey key, TValue value) - { - if (key == null) + { + if (key == null) throw new ArgumentException("Null key", nameof(key)); lock (_lock) items.Add(WeakRef(key), value); @@ -52,8 +52,8 @@ namespace System.Runtime.CompilerServices return items.TryGetValue(WeakRef(key), out value); } - public delegate TValue CreateValueCallback(TKey key); - + public delegate TValue CreateValueCallback(TKey key); + public TValue GetValue(TKey key, CreateValueCallback createValueCallback) { if (createValueCallback == null) @@ -70,29 +70,29 @@ namespace System.Runtime.CompilerServices return value; } } - } - - public TValue GetOrCreateValue(TKey key) - => GetValue(key, k => Activator.CreateInstance()); - + } + + public TValue GetOrCreateValue(TKey key) + => GetValue(key, k => Activator.CreateInstance()); + public bool Remove(TKey key) - { - if (key == null) - throw new ArgumentException("Null key", nameof(key)); - + { + if (key == null) + throw new ArgumentException("Null key", nameof(key)); + return items.Remove(WeakRef(key)); - } - - public ConditionalWeakTable() - => GCTracker.OnGC += OnGC; - ~ConditionalWeakTable() - => GCTracker.OnGC -= OnGC; - + } + + public ConditionalWeakTable() + => GCTracker.OnGC += OnGC; + ~ConditionalWeakTable() + => GCTracker.OnGC -= OnGC; + private void OnGC() { // on each GC, we want to clear the entire set of empty keys var nullWeakRef = WeakRef(null); while (items.Remove(nullWeakRef)) ; // just loop - } - } -} + } + } +} From 9e375e6e917bc37121a9bd6ea1c949edc41786ef Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Mon, 17 Aug 2020 18:34:21 -0500 Subject: [PATCH 10/22] Removed old csproj files --- BSIPA-Meta/BSIPA-Meta_old.csproj | 110 -------------- IPA.Injector/IPA.Injector_old.csproj | 152 ------------------- IPA.Loader/IPA.Loader_old.csproj | 209 --------------------------- Net3-Proxy/Net3-Proxy_old.csproj | 66 --------- 4 files changed, 537 deletions(-) delete mode 100644 BSIPA-Meta/BSIPA-Meta_old.csproj delete mode 100644 IPA.Injector/IPA.Injector_old.csproj delete mode 100644 IPA.Loader/IPA.Loader_old.csproj delete mode 100644 Net3-Proxy/Net3-Proxy_old.csproj diff --git a/BSIPA-Meta/BSIPA-Meta_old.csproj b/BSIPA-Meta/BSIPA-Meta_old.csproj deleted file mode 100644 index 3e2e4722..00000000 --- a/BSIPA-Meta/BSIPA-Meta_old.csproj +++ /dev/null @@ -1,110 +0,0 @@ - - - - - Debug - x64-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB} - Library - BSIPA_Meta - Meta Project - v4.6.1 - 512 - true - true - bin\$(Platform)\$(Configuration)\ - - - - Win32 - - - x64 - - - Net4 - - - Net3 - - - AnyCPU - true - full - false - DEBUG;TRACE - prompt - 4 - Debug - Debug - Release - - - AnyCPU - pdbonly - true - TRACE - prompt - 4 - Release - Release - Release - - - AnyCPU - true - full - false - DEBUG;TRACE - prompt - 4 - Debug - Verbose - Verbose_Release - - - AnyCPU - pdbonly - true - TRACE - prompt - 4 - Release - Verbose_Release - Verbose_Release - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/IPA.Injector/IPA.Injector_old.csproj b/IPA.Injector/IPA.Injector_old.csproj deleted file mode 100644 index fe606dd8..00000000 --- a/IPA.Injector/IPA.Injector_old.csproj +++ /dev/null @@ -1,152 +0,0 @@ - - - - - Debug - Net4 - true - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7} - Library - Properties - IPA.Injector - IPA.Injector - 512 - true - $(SolutionDir)=C:\ - portable - 8.0 - true - - - true - false - bin\$(Platform)\Debug\ - DEBUG;TRACE - prompt - 4 - - - true - bin\$(Platform)\Release\ - TRACE - prompt - 4 - - - v4.6.1 - $(DefineConstants);NET4 - - - v3.5 - $(DefineConstants);NET3 - - - $(DefineConstants);BeatSaber - - - - - - - - - - ..\Refs\UnityEngine.CoreModule.Net4.dll - False - - - ..\Refs\UnityEngine.CoreModule.Net3.dll - False - - - - - - - - - - - - - - - - - {5ad344f0-01a0-4ca8-92e5-9d095737744d} - IPA.Loader - - - {642F52DA-90F9-40E3-8784-6964F36752FB} - Net3-Proxy - - - - - Libraries\Mono\I18N.dll - Always - - - Libraries\Mono\I18N.West.dll - Always - - - Libraries\Mono\Microsoft.CSharp.dll - Always - - - Libraries\Mono\System.Runtime.Serialization.dll - Always - - - - - Libraries\Mono\I18N.dll - Always - - - Libraries\Mono\I18N.West.dll - Always - - - Libraries\Mono\System.Runtime.Serialization.dll - Always - - - - - 0.10.4 - - - 1.2.2 - - - 0.3.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/IPA.Loader/IPA.Loader_old.csproj b/IPA.Loader/IPA.Loader_old.csproj deleted file mode 100644 index 36c18f88..00000000 --- a/IPA.Loader/IPA.Loader_old.csproj +++ /dev/null @@ -1,209 +0,0 @@ - - - - - Debug - Net4 - true - {5AD344F0-01A0-4CA8-92E5-9D095737744D} - Library - Properties - IPA - IPA.Loader - 512 - true - $(SolutionDir)=C:\ - portable - 8.0 - true - CA1031 - - - true - false - bin\$(Platform)\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - true - bin\$(Platform)\Release\ - TRACE - prompt - 4 - false - - - v4.6.1 - $(DefineConstants);NET4 - - - v3.5 - $(DefineConstants);NET3 - - - $(DefineConstants);BeatSaber - - - $(OutputPath)IPA.Loader.xml - - - - - - - - - - - - - - ..\Refs\UnityEngine.CoreModule.Net4.dll - False - - - ..\Refs\UnityEngine.UnityWebRequestModule.Net4.dll - False - - - - - ..\Refs\UnityEngine.CoreModule.Net3.dll - False - - - ..\Refs\UnityEngine.UnityWebRequestModule.Net3.dll - False - - - - - {642F52DA-90F9-40E3-8784-6964F36752FB} - Net3-Proxy - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1.9.1.8 - - - 2.0.0.7 - - - 0.10.4 - - - 12.0.3 - - - 1.0.1 - - - 1.2.2 - - - 0.3.1 - - - - - - - - - - - - - \ No newline at end of file diff --git a/Net3-Proxy/Net3-Proxy_old.csproj b/Net3-Proxy/Net3-Proxy_old.csproj deleted file mode 100644 index 7d2de56c..00000000 --- a/Net3-Proxy/Net3-Proxy_old.csproj +++ /dev/null @@ -1,66 +0,0 @@ - - - - - Debug - AnyCPU - {642F52DA-90F9-40E3-8784-6964F36752FB} - Library - Properties - Net3_Proxy - Net3-Proxy - v3.5 - 512 - true - - - true - portable - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - portable - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.3.1 - - - 1.0.1 - - - - \ No newline at end of file From 178a3d870fccd55d9acd433c271e7443f19d7e6b Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Tue, 18 Aug 2020 17:36:25 -0500 Subject: [PATCH 11/22] Added build github action --- .github/workflows/build.yml | 47 +++++++++++++++++++++++++++++++++++++ .github/workflows/docs.yml | 2 +- BSIPA.sln | 1 + 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..0eee753a --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,47 @@ +name: Build + +on: + push: + branches-ignore: + - gh-pages + pull_request: + branches: + - master + release: + types: + - created + +defaults: + run: + shell: pwsh + +jobs: + build: + runs-on: windows-latest + strategy: + matrix: + platform: ["x86", "x64"] + env: + Configuration: Release + Platform: ${{ matrix.platform }} + steps: + - name: Checkout branch + uses: actions/checkout@v2 + - name: Checkout submodules + run: git submodule update --init --recursive + - name: Locate MSBuild + uses: warrenbuckley/Setup-MSBuild@v1 + - name: Restore + run: msbuild -t:Restore + - name: Build + run: msbuild -t:Build + - name: Upload net461 + uses: actions/upload-artifact@v2 + with: + name: BSIPA-net461 + path: BSIPA-Meta/bin/${{ env.Platform }}/${{ env.Configuration }}/net461/ + - name: Upload net35 + uses: actions/upload-artifact@v2 + with: + name: BSIPA-net35 + path: BSIPA-Meta/bin/${{ env.Platform }}/${{ env.Configuration }}/net35/ \ No newline at end of file diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 45f0e3f6..df137a93 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -33,7 +33,7 @@ jobs: - name: Install DocFX uses: crazy-max/ghaction-chocolatey@v1 with: - args: install docfx --version 2.48 -y + args: install docfx -y - name: Checkout current pages uses: actions/checkout@v2 with: diff --git a/BSIPA.sln b/BSIPA.sln index 903c1e8a..c4ad0f61 100644 --- a/BSIPA.sln +++ b/BSIPA.sln @@ -19,6 +19,7 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{4D6639A2-BD39-4F9B-AF7F-8E5F3B88243D}" ProjectSection(SolutionItems) = preProject appveyor.yml = appveyor.yml + .github\workflows\build.yml = .github\workflows\build.yml .github\workflows\docs.yml = .github\workflows\docs.yml README.md = README.md .github\workflows\tag_docs.yml = .github\workflows\tag_docs.yml From c53430c9233cb3d97dd8939a2d63496cdc9dcb17 Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Tue, 18 Aug 2020 17:38:05 -0500 Subject: [PATCH 12/22] Fixed indentation in build.yml --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0eee753a..4c6873d4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,7 +3,7 @@ name: Build on: push: branches-ignore: - - gh-pages + - gh-pages pull_request: branches: - master @@ -17,7 +17,7 @@ defaults: jobs: build: - runs-on: windows-latest + runs-on: windows-latest strategy: matrix: platform: ["x86", "x64"] From 8a49bc0890523fe5489b9ae621d9c2cf5f8d4a1b Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Tue, 18 Aug 2020 17:43:50 -0500 Subject: [PATCH 13/22] Added -m flag to msbuild Added platform to build artifact names --- .github/workflows/build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4c6873d4..3ae3e199 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,16 +32,16 @@ jobs: - name: Locate MSBuild uses: warrenbuckley/Setup-MSBuild@v1 - name: Restore - run: msbuild -t:Restore + run: msbuild -t:Restore -m - name: Build - run: msbuild -t:Build + run: msbuild -t:Build -m - name: Upload net461 uses: actions/upload-artifact@v2 with: - name: BSIPA-net461 + name: BSIPA-net461-${{ env.Platform }} path: BSIPA-Meta/bin/${{ env.Platform }}/${{ env.Configuration }}/net461/ - name: Upload net35 uses: actions/upload-artifact@v2 with: - name: BSIPA-net35 + name: BSIPA-net35-${{ env.Platform }} path: BSIPA-Meta/bin/${{ env.Platform }}/${{ env.Configuration }}/net35/ \ No newline at end of file From 8d87fc6f00f9b52988fc35001cef67d21af9b772 Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Tue, 18 Aug 2020 17:47:54 -0500 Subject: [PATCH 14/22] Removed AppVeyor altogether --- BSIPA.sln | 1 - README.md | 2 +- appveyor.yml | 182 --------------------------------------------------- 3 files changed, 1 insertion(+), 184 deletions(-) delete mode 100644 appveyor.yml diff --git a/BSIPA.sln b/BSIPA.sln index c4ad0f61..da84d302 100644 --- a/BSIPA.sln +++ b/BSIPA.sln @@ -18,7 +18,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{C79C2C3A EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{4D6639A2-BD39-4F9B-AF7F-8E5F3B88243D}" ProjectSection(SolutionItems) = preProject - appveyor.yml = appveyor.yml .github\workflows\build.yml = .github\workflows\build.yml .github\workflows\docs.yml = .github\workflows\docs.yml README.md = README.md diff --git a/README.md b/README.md index 7540c3a0..21998ae1 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -# ![BSIPA](docs/images/banner_dark.svg) [![Build status](https://ci.appveyor.com/api/projects/status/1ruhnnfeudrrd097?svg=true)](https://ci.appveyor.com/project/nike4613/beatsaber-ipa-reloaded-9smsb) +# ![BSIPA](docs/images/banner_dark.svg) [![Build](https://github.com/bsmg/BeatSaber-IPA-Reloaded/workflows/Build/badge.svg)](https://github.com/bsmg/BeatSaber-IPA-Reloaded) [ALL DOCUMENTATION HAS MOVED HERE](https://bsmg.github.io/BeatSaber-IPA-Reloaded/) diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index c1756399..00000000 --- a/appveyor.yml +++ /dev/null @@ -1,182 +0,0 @@ -version: 'BSIPA-{branch}-{build}' - -environment: - bsipa_version: '4.0.6' - gh_token: - secure: E42gl/yepETuoLSwbJZ1GmEIPK6cCJu6zkd59NA21XiICtEV6COOLW7aehi1tcVU - - do_deploy: true - BuildForBeatSaber: 'false' - BUILD_DOC: 'no' - -pull_requests: - do_not_increment_build_number: true - -init: - - git config --global core.autocrlf true - -install: - - git submodule update --init --recursive - - nuget restore - - ps: | - if (-Not $env:APPVEYOR_PULL_REQUEST_TITLE -And $env:BUILD_DOC -Eq 'yes') - { - choco install docfx -y - } - -image: Visual Studio 2019 - -configuration: Release -platform: - - x64-Net4 - - x86-Net4 - - x64-Net3 - - x86-Net3 - -artifacts: # When Net3 is added, this will need to be moved to the for block to only run for Net4 builds - - path: BSIPA-ModList/bin/Release - name: ModList - - path: BSIPA-Meta/bin/$(platform)/$(configuration) - name: BSIPA-$(platform) - -matrix: - allow_failures: - - platform: x64-Net3 - - platform: x86-Net3 - -for: -- - matrix: - only: - - platform: x64-Net4 - environment: - BuildForBeatSaber: 'true' -- - matrix: - except: - - BUILD_DOC: 'yes' - - skip_tags: true -- - matrix: - only: - - BUILD_DOC: 'yes' - - artifacts: - environment: - do_deploy: false - skip_tags: false - build_script: - - ps: | - cd docs - - $tagsName = "tags" - $branchName = "branch" - - function Git-Do { - git config --global core.autocrlf true - git config --global credential.helper store - Add-Content "$HOME\.git-credentials" "https://$($env:gh_token):x-oauth-basic@github.com`n" - git config --global user.email $env:APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL - git config --global user.name $env:APPVEYOR_REPO_COMMIT_AUTHOR - git clone -q "https://github.com/beat-saber-modding-group/BeatSaber-IPA-Reloaded.git" -b gh-pages origin_site - - if (-Not (Test-Path origin_site/$tagsName)) - { New-Item -ItemType directory -Path origin_site/$tagsName } - if (-Not (Test-Path origin_site/$branchName)) - { New-Item -ItemType directory -Path origin_site/$branchName } - } - - function Do-DocFX - { - Add-Content link_branch.json "{`"_gitContribute`":{`"sourceBranch`":`"$env:APPVEYOR_REPO_COMMIT`",`"apiSpecFolder`":`"docs/override`"}}" - powershell .\build.ps1 - if ($lastexitcode -ne 0){ - throw [System.Exception] "docfx build failed with exit code $lastexitcode." - } - } - - if ($env:APPVEYOR_REPO_TAG -eq "true" -And $env:APPVEYOR_REPO_BRANCH -eq 'master') - { # Copy current site into tags - & Do-DocFX - - & Git-Do - - cd origin_site # make things a bit easier - - $tagPath = "$tagsName/$env:APPVEYOR_REPO_TAG_NAME" - Move-Item ../_site $tagPath - - git add -A 2>&1 - git commit -q -a -m "Saved tag $env:APPVEYOR_REPO_TAG_NAME" 2>&1 - } - elseif (-Not $env:APPVEYOR_PULL_REQUEST_TITLE) - { # Generate docs - $message = "" - if ($env:APPVEYOR_REPO_BRANCH -eq 'master') - { # do the special generation for master - & Do-DocFX - - & Git-Do - - Move-Item origin_site/.git _site - Move-Item origin_site/$tagsName _site - Move-Item origin_site/$branchName _site - - cd _site - - $message = "Generated Docs -- $env:APPVEYOR_REPO_COMMIT_MESSAGE" - } - else - { # generate for another branch; this is more similar to the tag code - & Do-DocFX - - & Git-Do - - cd origin_site # make things a bit easier - - $branchPath = "$branchName/$env:APPVEYOR_REPO_BRANCH" - # force remove it - Get-ChildItem -Path $branchPath -Recurse | Remove-Item -Force -Recurse - Remove-Item $branchPath -Force - - # move generated into place - Move-Item ../_site $branchPath - - $message = "Generated Docs ($env:APPVEYOR_REPO_BRANCH) -- $env:APPVEYOR_REPO_COMMIT_MESSAGE" - } - git add -A 2>&1 - git commit -q -a -m "$message" 2>&1 - } - - git push -q origin gh-pages 2>&1 - -branches: - except: - - gh-pages - -cache: - - '%LocalAppData%\NuGet\v3-cache' # NuGet v3 - -build: - verbosity: normal - project: BSIPA.sln - -deploy: -- provider: GitHub - release: BSIPA $(bsipa_version)-draft - tag: $(bsipa_version)-d - description: | - **Build:** [$(bsipa_version)-$(APPVEYOR_BUILD_NUMBER)](https://ci.appveyor.com/project/nike4613/beatsaber-ipa-reloaded-9smsb/builds/$(APPVEYOR_BUILD_ID)) - **Latest Commit:** $(APPVEYOR_REPO_COMMIT) - - `$(APPVEYOR_REPO_COMMIT_MESSAGE)` - - `$(APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED)` - auth_token: - secure: KhF3q/zWEFwrW0QeZLqE3NAkWR4u9iVhsmcyzXvwwJ28fUy+MzW4CWBx3RxNM60t - artifact: '/.*[^_]\.zip/' - draft: true - force_update: true - on: - branch: master - APPVEYOR_REPO_TAG: false - do_deploy: true From 9814abc26d2429ad7b0b04eb35c23b7aa660018a Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Tue, 18 Aug 2020 18:19:46 -0500 Subject: [PATCH 15/22] Added release drafter to actions --- .github/release_draft.yml | 19 +++++++++++++++++++ .github/workflows/build.yml | 13 +++++++++---- BSIPA.sln | 1 + 3 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 .github/release_draft.yml diff --git a/.github/release_draft.yml b/.github/release_draft.yml new file mode 100644 index 00000000..065b41c8 --- /dev/null +++ b/.github/release_draft.yml @@ -0,0 +1,19 @@ +name-template: 'BSIPA $RESOLVED_VERSION' +tag-template: '$RESOLVED_VERSION' +categories: + +change-template: '- $TITLE @$AUTHOR (#$NUMBER)' +version-resolver: + major: + labels: + - 'major' + minor: + labels: + - 'minor' + patch: + labels: + - 'patch' + default: patch +template: | + [*All Changes*](https://github.com/bsmg/BeatSaber-IPA-Reloaded/compare/$PREVIOUS_TAG...$RESOLVED_VERSION) + [*Documentation Permalink*](https://bsmg.github.io/BeatSaber-IPA-Reloaded/tags/$RESOLVED_VERSION/index.html) \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3ae3e199..c6f76df4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,9 +7,6 @@ on: pull_request: branches: - master - release: - types: - - created defaults: run: @@ -44,4 +41,12 @@ jobs: uses: actions/upload-artifact@v2 with: name: BSIPA-net35-${{ env.Platform }} - path: BSIPA-Meta/bin/${{ env.Platform }}/${{ env.Configuration }}/net35/ \ No newline at end of file + path: BSIPA-Meta/bin/${{ env.Platform }}/${{ env.Configuration }}/net35/ + - name: Create Release Draft + id: create_release + uses: release-drafter/release-drafter@v5 + with: + config-name: release_draft.yml + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # TODO: make it auto-upload assets \ No newline at end of file diff --git a/BSIPA.sln b/BSIPA.sln index da84d302..bda99539 100644 --- a/BSIPA.sln +++ b/BSIPA.sln @@ -18,6 +18,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{C79C2C3A EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{4D6639A2-BD39-4F9B-AF7F-8E5F3B88243D}" ProjectSection(SolutionItems) = preProject + .github\release_draft.yml = .github\release_draft.yml .github\workflows\build.yml = .github\workflows\build.yml .github\workflows\docs.yml = .github\workflows\docs.yml README.md = README.md From cdffc43b271226800207f6cfb6909ba1da7df71f Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Tue, 18 Aug 2020 18:22:30 -0500 Subject: [PATCH 16/22] Removed drafter, because it apparently only works on linux --- .github/workflows/build.yml | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c6f76df4..7e03ec99 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -41,12 +41,4 @@ jobs: uses: actions/upload-artifact@v2 with: name: BSIPA-net35-${{ env.Platform }} - path: BSIPA-Meta/bin/${{ env.Platform }}/${{ env.Configuration }}/net35/ - - name: Create Release Draft - id: create_release - uses: release-drafter/release-drafter@v5 - with: - config-name: release_draft.yml - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # TODO: make it auto-upload assets \ No newline at end of file + path: BSIPA-Meta/bin/${{ env.Platform }}/${{ env.Configuration }}/net35/ \ No newline at end of file From ce6e92ef5a5b3c5ce4483efbee6d0d3a18e0dd7f Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Sat, 22 Aug 2020 02:01:44 -0500 Subject: [PATCH 17/22] Implemented new Features system --- .../Loader/Features/ConfigProviderFeature.cs | 29 ++-- IPA.Loader/Loader/Features/DefineFeature.cs | 70 ++++++--- IPA.Loader/Loader/Features/Feature.cs | 139 ++++++++++++------ .../Loader/Features/InitInjectorFeature.cs | 105 ------------- IPA.Loader/Loader/Features/NoUpdateFeature.cs | 12 -- IPA.Loader/Loader/Features/PrintFeature.cs | 32 ---- IPA.Loader/Loader/PluginLoader.cs | 105 ++++++------- IPA.Loader/Loader/PluginManager.cs | 28 +++- IPA.Loader/Loader/PluginManifest.cs | 3 +- IPA.Loader/Loader/PluginMetadata.cs | 4 + IPA.Loader/Loader/manifest.json | 14 +- IPA.Loader/Updating/BeatMods/Updater.cs | 15 -- 12 files changed, 242 insertions(+), 314 deletions(-) delete mode 100644 IPA.Loader/Loader/Features/InitInjectorFeature.cs delete mode 100644 IPA.Loader/Loader/Features/NoUpdateFeature.cs delete mode 100644 IPA.Loader/Loader/Features/PrintFeature.cs diff --git a/IPA.Loader/Loader/Features/ConfigProviderFeature.cs b/IPA.Loader/Loader/Features/ConfigProviderFeature.cs index 95c4ff38..bceceaf7 100644 --- a/IPA.Loader/Loader/Features/ConfigProviderFeature.cs +++ b/IPA.Loader/Loader/Features/ConfigProviderFeature.cs @@ -1,28 +1,39 @@ -using System; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; using System.IO; namespace IPA.Loader.Features { internal class ConfigProviderFeature : Feature { - public override bool Initialize(PluginMetadata meta, string[] parameters) - {// parameters should be (fully qualified name of provider type) - if (parameters.Length != 1) + private class DataModel + { + [JsonProperty("type", Required = Required.Always)] + public string TypeName; + } + + protected override bool Initialize(PluginMetadata meta, JObject featureData) + { + DataModel data; + try { - InvalidMessage = "Incorrect number of parameters"; + data = featureData.ToObject(); + } + catch (Exception e) + { + InvalidMessage = $"Invalid data: {e}"; return false; } - RequireLoaded(meta); - Type getType; try { - getType = meta.Assembly.GetType(parameters[0]); + getType = meta.Assembly.GetType(data.TypeName); } catch (ArgumentException) { - InvalidMessage = $"Invalid type name {parameters[0]}"; + InvalidMessage = $"Invalid type name {data.TypeName}"; return false; } catch (Exception e) when (e is FileNotFoundException || e is FileLoadException || e is BadImageFormatException) diff --git a/IPA.Loader/Loader/Features/DefineFeature.cs b/IPA.Loader/Loader/Features/DefineFeature.cs index 6835cc32..1b08bfa5 100644 --- a/IPA.Loader/Loader/Features/DefineFeature.cs +++ b/IPA.Loader/Loader/Features/DefineFeature.cs @@ -1,4 +1,7 @@ -using System; +using IPA.Logging; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; using System.IO; namespace IPA.Loader.Features @@ -7,27 +10,49 @@ namespace IPA.Loader.Features { public static bool NewFeature = true; - protected internal override bool StoreOnPlugin => false; + private class DataModel + { + [JsonProperty("type", Required = Required.Always)] + public string TypeName; + [JsonProperty("name", Required = Required.DisallowNull)] + public string ActualName = null; - public override bool Initialize(PluginMetadata meta, string[] parameters) - { // parameters should be (name, fully qualified type) - if (parameters.Length != 2) + public string Name => ActualName ?? TypeName; + } + + private DataModel data; + + protected override bool Initialize(PluginMetadata meta, JObject featureData) + { + Logger.features.Debug("Executing DefineFeature Init"); + + try { - InvalidMessage = "Incorrect number of parameters"; + data = featureData.ToObject(); + } + catch (Exception e) + { + InvalidMessage = $"Invalid data: {e}"; return false; } - - RequireLoaded(meta); + + InvalidMessage = $"Feature {data.Name} already exists"; + return PreregisterFeature(meta, data.Name); + } + + public override void AfterInit(PluginMetadata meta, object pluginInstance) + { + Logger.features.Debug("Executing DefineFeature AfterInit"); Type type; try { - type = meta.Assembly.GetType(parameters[1]); + type = meta.Assembly.GetType(data.TypeName); } catch (ArgumentException) { - InvalidMessage = $"Invalid type name {parameters[1]}"; - return false; + Logger.features.Error($"Invalid type name {data.TypeName}"); + return; } catch (Exception e) when (e is FileNotFoundException || e is FileLoadException || e is BadImageFormatException) { @@ -46,28 +71,31 @@ namespace IPA.Loader.Features break; } - InvalidMessage = $"Could not find {filename} while loading type"; - return false; + Logger.features.Error($"Could not find {filename} while loading type"); + return; } if (type == null) { - InvalidMessage = $"Invalid type name {parameters[1]}"; - return false; + Logger.features.Error($"Invalid type name {data.TypeName}"); + return; } try { - if (RegisterFeature(parameters[0], type)) return NewFeature = true; - - InvalidMessage = $"Feature with name {parameters[0]} already exists"; - return false; + if (RegisterFeature(meta, data.Name, type)) + { + NewFeature = true; + return; + } + Logger.features.Error($"Feature with name {data.Name} already exists"); + return; } catch (ArgumentException) { - InvalidMessage = $"{type.FullName} not a subclass of {nameof(Feature)}"; - return false; + Logger.features.Error($"{type.FullName} not a subclass of {nameof(Feature)}"); + return; } } } diff --git a/IPA.Loader/Loader/Features/Feature.cs b/IPA.Loader/Loader/Features/Feature.cs index 20d07728..d51b94ea 100644 --- a/IPA.Loader/Loader/Features/Feature.cs +++ b/IPA.Loader/Loader/Features/Feature.cs @@ -1,5 +1,8 @@ -using System; +using Mono.Cecil; +using Newtonsoft.Json.Linq; +using System; using System.Collections.Generic; +using System.Reflection; using System.Text; #if NET3 using Net3_Proxy; @@ -16,46 +19,24 @@ namespace IPA.Loader.Features public abstract class Feature { /// - /// Initializes the feature with the parameters provided in the definition. - /// - /// Note: When no parenthesis are provided, is an empty array. + /// Initializes the feature with the data provided in the definition. /// /// - /// This gets called BEFORE *your* `Init` method. - /// - /// Returning does *not* prevent the plugin from being loaded. It simply prevents the feature from being used. + /// This gets called AFTER your Init method, but BEFORE the target's Init method. If it is applied to the defining plugin, BeforeInit is not called. + /// Returning does not prevent the plugin from being loaded. It simply prevents the feature from being used. /// /// the metadata of the plugin that is being prepared - /// the parameters passed to the feature definition, or null + /// the data provided with the feature /// if the feature is valid for the plugin, otherwise - public abstract bool Initialize(PluginMetadata meta, string[] parameters); - - /// - /// Evaluates the Feature for use in conditional meta-Features. This should be re-calculated on every call, unless it can be proven to not change. - /// - /// This will be called on every feature that returns from - /// - /// the truthiness of the Feature. - public virtual bool Evaluate() => true; + protected abstract bool Initialize(PluginMetadata meta, JObject featureData); /// /// The message to be logged when the feature is not valid for a plugin. - /// This should also be set whenever either or returns false. + /// This should also be set whenever either returns false. /// /// the message to show when the feature is marked invalid public virtual string InvalidMessage { get; protected set; } - /// - /// Called before a plugin is loaded. This should never throw an exception. An exception will abort the loading of the plugin with an error. - /// - /// - /// The assembly will still be loaded, but the plugin will not be constructed if this returns . - /// Any features it defines, for example, will still be loaded. - /// - /// the plugin about to be loaded - /// whether or not the plugin should be loaded - public virtual bool BeforeLoad(PluginMetadata plugin) => true; - /// /// Called before a plugin's `Init` method is called. This will not be called if there is no `Init` method. This should never throw an exception. An exception will abort the loading of the plugin with an error. /// @@ -77,16 +58,10 @@ namespace IPA.Loader.Features public virtual void AfterInit(PluginMetadata plugin) { } /// - /// Ensures a plugin's assembly is loaded. Do not use unless you need to. - /// - /// the plugin to ensure is loaded. - protected void RequireLoaded(PluginMetadata plugin) => PluginLoader.Load(plugin); - - /// - /// Defines whether or not this feature will be accessible from the plugin metadata once loaded. + /// Called after a plugin with this feature appplied is disabled. /// - /// if this will be stored on the plugin metadata, otherwise - protected internal virtual bool StoreOnPlugin => true; + /// the plugin that was disabled + public virtual void AfterDisable(PluginMetadata plugin) { } // TODO: rework features to take arguments as JSON objects @@ -99,39 +74,105 @@ namespace IPA.Loader.Features { featureTypes = new Dictionary { - { "define-feature", typeof(DefineFeature) } + { "IPA.DefineFeature", typeof(DefineFeature) } + }; + featureDelcarers = new Dictionary + { + { "IPA.DefineFeature", null } }; } private static Dictionary featureTypes; + private static Dictionary featureDelcarers; internal static bool HasFeature(string name) => featureTypes.ContainsKey(name); - internal static bool RegisterFeature(string name, Type type) + internal static bool PreregisterFeature(PluginMetadata defining, string name) + { + if (featureDelcarers.ContainsKey(name)) return false; + featureDelcarers.Add(name, defining); + return true; + } + + internal static bool RegisterFeature(PluginMetadata definingPlugin, string name, Type type) { if (!typeof(Feature).IsAssignableFrom(type)) throw new ArgumentException($"Feature type not subclass of {nameof(Feature)}", nameof(type)); + if (featureTypes.ContainsKey(name)) return false; + + if (featureDelcarers.TryGetValue(name, out var declarer)) + { + if (definingPlugin != declarer) + return false; + } + featureTypes.Add(name, type); return true; } - internal struct FeatureParse + private class EmptyFeature : Feature { + protected override bool Initialize(PluginMetadata meta, JObject featureData) + { + throw new NotImplementedException(); + } + } + + internal string FeatureName; + + internal class Instance + { + public readonly PluginMetadata AppliedTo; public readonly string Name; - public readonly string[] Parameters; + public readonly JObject Data; - public FeatureParse(string name, string[] parameters) + public Instance(PluginMetadata appliedTo, string name, JObject data) { + AppliedTo = appliedTo; Name = name; - Parameters = parameters; + Data = data; + type = null; + } + + private Type type; + public bool TryGetDefiningPlugin(out PluginMetadata plugin) + { + return featureDelcarers.TryGetValue(Name, out plugin); + } + + // returns whether or not Initialize returned true, feature is always set when the thing exists + public bool TryCreate(out Feature feature) + { + feature = null; + if (type == null) + { + if (!featureTypes.TryGetValue(Name, out type)) + return false; + } + + bool result; + try + { + feature = (Feature)Activator.CreateInstance(type); + feature.FeatureName = Name; + + result = feature.Initialize(AppliedTo, Data); + } + catch (Exception e) + { + result = false; + feature = new EmptyFeature() { InvalidMessage = e.ToString() }; + } + return result; } } + /* // returns false with both outs null for no such feature internal static bool TryParseFeature(string featureString, PluginMetadata plugin, - out Feature feature, out Exception failException, out bool featureValid, out FeatureParse parsed, - FeatureParse? preParsed = null) + out Feature feature, out Exception failException, out bool featureValid, out Instance parsed, + Instance? preParsed = null) { failException = null; feature = null; @@ -190,7 +231,7 @@ namespace IPA.Loader.Features if (name == null) name = builder.ToString(); - parsed = new FeatureParse(name, parameters.ToArray()); + parsed = new Instance(name, parameters.ToArray()); if (parens != 0) { @@ -212,7 +253,7 @@ namespace IPA.Loader.Features return false; } - featureValid = aFeature.Initialize(plugin, parsed.Parameters); + featureValid = aFeature.Initialize(plugin, TODO); feature = aFeature; return true; } @@ -221,6 +262,6 @@ namespace IPA.Loader.Features failException = e; return false; } - } + }*/ } } \ No newline at end of file diff --git a/IPA.Loader/Loader/Features/InitInjectorFeature.cs b/IPA.Loader/Loader/Features/InitInjectorFeature.cs deleted file mode 100644 index af6487f9..00000000 --- a/IPA.Loader/Loader/Features/InitInjectorFeature.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using System.IO; -using System.Reflection; -#if NET3 -using Array = Net3_Proxy.Array; -#endif - -namespace IPA.Loader.Features -{ - internal class InitInjectorFeature : Feature - { - protected internal override bool StoreOnPlugin => false; - - public override bool Initialize(PluginMetadata meta, string[] parameters) - { // parameters should be (assembly qualified lookup type, [fully qualified type]:[method name]) - // method should be static - if (parameters.Length != 2) - { - InvalidMessage = "Incorrect number of parameters"; - return false; - } - - RequireLoaded(meta); - - var methodParts = parameters[1].Split(':'); - - var type = Type.GetType(parameters[0], false); - if (type == null) - { - InvalidMessage = $"Could not find type {parameters[0]}"; - return false; - } - - Type getType; - try - { - getType = meta.Assembly.GetType(methodParts[0]); - } - catch (ArgumentException) - { - InvalidMessage = $"Invalid type name {methodParts[0]}"; - return false; - } - catch (Exception e) when (e is FileNotFoundException || e is FileLoadException || e is BadImageFormatException) - { - string filename; - - switch (e) - { - case FileNotFoundException fn: - filename = fn.FileName; - goto hasFilename; - case FileLoadException fl: - filename = fl.FileName; - goto hasFilename; - case BadImageFormatException bi: - filename = bi.FileName; - hasFilename: - InvalidMessage = $"Could not find {filename} while loading type"; - break; - default: - InvalidMessage = $"Error while loading type: {e}"; - break; - } - - return false; - } - - MethodInfo method; - try - { - method = getType.GetMethod(methodParts[1], BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic, - null, new[] - { - typeof(object), - typeof(ParameterInfo), - typeof(PluginMetadata) - }, Array.Empty()); - } - catch (Exception e) - { - InvalidMessage = $"Error while loading type: {e}"; - return false; - } - - if (method == null) - { - InvalidMessage = $"Could not find method {methodParts[1]} in type {methodParts[0]}"; - return false; - } - - try - { - var del = (PluginInitInjector.InjectParameter)Delegate.CreateDelegate(typeof(PluginInitInjector.InjectParameter), null, method); - PluginInitInjector.AddInjector(type, del); - return true; - } - catch (Exception e) - { - InvalidMessage = $"Error generated while creating delegate: {e}"; - return false; - } - } - } -} diff --git a/IPA.Loader/Loader/Features/NoUpdateFeature.cs b/IPA.Loader/Loader/Features/NoUpdateFeature.cs deleted file mode 100644 index afe38972..00000000 --- a/IPA.Loader/Loader/Features/NoUpdateFeature.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace IPA.Loader.Features -{ - internal class NoUpdateFeature : Feature - { - public override bool Initialize(PluginMetadata meta, string[] parameters) - { - return meta.Id != null; - } - - public override string InvalidMessage { get; protected set; } = "No ID specified; cannot update anyway"; - } -} diff --git a/IPA.Loader/Loader/Features/PrintFeature.cs b/IPA.Loader/Loader/Features/PrintFeature.cs deleted file mode 100644 index 2acc48d8..00000000 --- a/IPA.Loader/Loader/Features/PrintFeature.cs +++ /dev/null @@ -1,32 +0,0 @@ - -using IPA.Logging; - -namespace IPA.Loader.Features -{ - internal class PrintFeature : Feature - { - public override bool Initialize(PluginMetadata meta, string[] parameters) - { - Logger.features.Info($"{meta.Name}: {string.Join(" ", parameters)}"); - return true; - } - } - - internal class DebugFeature : Feature - { - public override bool Initialize(PluginMetadata meta, string[] parameters) - { - Logger.features.Debug($"{meta.Name}: {string.Join(" ", parameters)}"); - return true; - } - } - - internal class WarnFeature : Feature - { - public override bool Initialize(PluginMetadata meta, string[] parameters) - { - Logger.features.Warn($"{meta.Name}: {string.Join(" ", parameters)}"); - return true; - } - } -} diff --git a/IPA.Loader/Loader/PluginLoader.cs b/IPA.Loader/Loader/PluginLoader.cs index aefc86fa..b3b8facb 100644 --- a/IPA.Loader/Loader/PluginLoader.cs +++ b/IPA.Loader/Loader/PluginLoader.cs @@ -39,6 +39,7 @@ namespace IPA.Loader LoadMetadata(); Resolve(); + InitFeatures(); ComputeLoadOrder(); FilterDisabled(); FilterWithoutFiles(); @@ -687,57 +688,47 @@ namespace IPA.Loader internal static void InitFeatures() { - var parsedFeatures = PluginsMetadata.Select(m => - (metadata: m, - features: m.Manifest.Features.Select(feature => - (feature, parsed: Ref.Create(null)) - ).ToList() - ) - ).ToList(); - - while (DefineFeature.NewFeature) + foreach (var meta in PluginsMetadata) { - DefineFeature.NewFeature = false; - - foreach (var (metadata, features) in parsedFeatures) - for (var i = 0; i < features.Count; i++) - { - var feature = features[i]; - - var success = Feature.TryParseFeature(feature.feature, metadata, out var featureObj, - out var exception, out var valid, out var parsed, feature.parsed.Value); - - if (!success && !valid && featureObj == null && exception == null) // no feature of type found - feature.parsed.Value = parsed; - else if (success) + foreach (var feature in meta.Manifest.Features.Select(f => new Feature.Instance(meta, f.Key, f.Value))) + { + if (feature.TryGetDefiningPlugin(out var plugin) && plugin == null) + { // this is a DefineFeature, so we want to initialize it early + if (!feature.TryCreate(out var inst)) { - if (valid && featureObj.StoreOnPlugin) - metadata.InternalFeatures.Add(featureObj); - else if (!valid) - Logger.features.Warn( - $"Feature not valid on {metadata.Name}: {featureObj.InvalidMessage}"); - features.RemoveAt(i--); + Logger.features.Error($"Error evaluating {feature.Name}: {inst.InvalidMessage}"); } else { - Logger.features.Error($"Error parsing feature definition on {metadata.Name}"); - Logger.features.Error(exception); - features.RemoveAt(i--); + meta.InternalFeatures.Add(inst); } } - - foreach (var plugin in PluginsMetadata) - foreach (var feature in plugin.Features) - feature.Evaluate(); + else + { // this is literally any other feature, so we want to delay its initialization + meta.UnloadedFeatures.Add(feature); + } + } } - foreach (var plugin in parsedFeatures) + // at this point we have pre-initialized all features, so we can go ahead and use them to add stuff to the dep resolver + foreach (var meta in PluginsMetadata) { - if (plugin.features.Count <= 0) continue; + foreach (var feature in meta.UnloadedFeatures) + { + if (feature.TryGetDefiningPlugin(out var plugin)) + { + if (plugin != meta) + { // if the feature is not applied to the defining feature + meta.LoadsAfter.Add(plugin); + } - Logger.features.Warn($"On plugin {plugin.metadata.Name}:"); - foreach (var feature in plugin.features) - Logger.features.Warn($" Feature not found with name {feature.feature}"); + plugin.CreateFeaturesWhenLoaded.Add(feature); + } + else + { + Logger.features.Warn($"No such feature {feature.Name}"); + } + } } } @@ -807,20 +798,6 @@ namespace IPA.Loader Load(meta); - foreach (var feature in meta.Features) - { - if (!feature.BeforeLoad(meta)) - { - Logger.loader.Warn( - $"Feature {feature?.GetType()} denied plugin {meta.Name} from loading! {feature?.InvalidMessage}"); - ignoredPlugins.Add(meta, new IgnoreReason(Reason.Feature) - { - ReasonText = $"Denied in {nameof(Feature.BeforeLoad)} of feature {feature?.GetType()}:\n\t{feature?.InvalidMessage}" - }); - return null; - } - } - PluginExecutor exec; try { @@ -838,10 +815,10 @@ namespace IPA.Loader if (!feature.BeforeInit(meta)) { Logger.loader.Warn( - $"Feature {feature?.GetType()} denied plugin {meta.Name} from initializing! {feature?.InvalidMessage}"); + $"Feature {feature?.FeatureName} denied plugin {meta.Name} from initializing! {feature?.InvalidMessage}"); ignoredPlugins.Add(meta, new IgnoreReason(Reason.Feature) { - ReasonText = $"Denied in {nameof(Feature.BeforeInit)} of feature {feature?.GetType()}:\n\t{feature?.InvalidMessage}" + ReasonText = $"Denied in {nameof(Feature.BeforeInit)} of feature {feature?.FeatureName}:\n\t{feature?.InvalidMessage}" }); return null; } @@ -863,6 +840,21 @@ namespace IPA.Loader return null; } + // TODO: make this new features system behave better wrt DynamicInit plugins + foreach (var feature in meta.CreateFeaturesWhenLoaded) + { + if (!feature.TryCreate(out var inst)) + { + Logger.features.Warn($"Could not create instance of feature {feature.Name}: {inst.InvalidMessage}"); + } + else + { + feature.AppliedTo.InternalFeatures.Add(inst); + feature.AppliedTo.UnloadedFeatures.Remove(feature); + } + } + meta.CreateFeaturesWhenLoaded.Clear(); // if a plugin is loaded twice, for the moment, we don't want to create the feature twice + foreach (var feature in meta.Features) try { @@ -880,7 +872,6 @@ namespace IPA.Loader internal static List LoadPlugins() { - InitFeatures(); DisabledPlugins.ForEach(Load); // make sure they get loaded into memory so their metadata and stuff can be read more easily var list = new List(); diff --git a/IPA.Loader/Loader/PluginManager.cs b/IPA.Loader/Loader/PluginManager.cs index c8af2db6..28f117f0 100644 --- a/IPA.Loader/Loader/PluginManager.cs +++ b/IPA.Loader/Loader/PluginManager.cs @@ -14,6 +14,7 @@ using UnityEngine; using Logger = IPA.Logging.Logger; using System.Threading.Tasks; using IPA.Utilities.Async; +using IPA.Loader.Features; #if NET4 using TaskEx = System.Threading.Tasks.Task; using TaskEx6 = System.Threading.Tasks.Task; @@ -189,16 +190,33 @@ namespace IPA.Loader { if (alreadyDisabled.TryGetValue(exec.Executor, out var task)) return task; - else + else { if (exec.Executor.Metadata.RuntimeOptions != RuntimeOptions.DynamicInit) return TaskEx6.FromException(new CannotRuntimeDisableException(exec.Executor.Metadata)); var res = TaskEx.WhenAll(exec.Dependents.Select(d => Disable(d, alreadyDisabled))) - .ContinueWith(t => t.IsFaulted - ? TaskEx.WhenAll(t, TaskEx6.FromException( - new CannotRuntimeDisableException(exec.Executor.Metadata, "Dependents cannot be disabled for plugin"))) - : exec.Executor.Disable(), UnityMainThreadTaskScheduler.Default).Unwrap(); + .ContinueWith(t => + { + if (t.IsFaulted) { + return TaskEx.WhenAll(t, TaskEx6.FromException( + new CannotRuntimeDisableException(exec.Executor.Metadata, "Dependents cannot be disabled for plugin"))); + } + return exec.Executor.Disable() + .ContinueWith(t => + { + foreach (var feature in exec.Executor.Metadata.Features) + { + try { + feature.AfterDisable(exec.Executor.Metadata); + } + catch (Exception e) + { + Logger.loader.Critical($"Feature errored in {nameof(Feature.AfterDisable)}: {e}"); + } + } + }, UnityMainThreadTaskScheduler.Default); + }, UnityMainThreadTaskScheduler.Default).Unwrap(); // We do not want to call the disable method if a dependent couldn't be disabled // By scheduling on a UnityMainThreadScheduler, we ensure that Disable() is always called on the Unity main thread alreadyDisabled.Add(exec.Executor, res); diff --git a/IPA.Loader/Loader/PluginManifest.cs b/IPA.Loader/Loader/PluginManifest.cs index f36f6e9d..405bf488 100644 --- a/IPA.Loader/Loader/PluginManifest.cs +++ b/IPA.Loader/Loader/PluginManifest.cs @@ -1,6 +1,7 @@ using IPA.JsonConverters; using IPA.Utilities; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using SemVer; using System; using System.Collections.Generic; @@ -40,7 +41,7 @@ namespace IPA.Loader public Dictionary Conflicts = new Dictionary(); [JsonProperty("features", Required = Required.DisallowNull)] - public string[] Features = Array.Empty(); + public Dictionary Features = new Dictionary(); [JsonProperty("loadBefore", Required = Required.DisallowNull)] public string[] LoadBefore = Array.Empty(); diff --git a/IPA.Loader/Loader/PluginMetadata.cs b/IPA.Loader/Loader/PluginMetadata.cs index 22e83805..5ff7b92b 100644 --- a/IPA.Loader/Loader/PluginMetadata.cs +++ b/IPA.Loader/Loader/PluginMetadata.cs @@ -76,6 +76,10 @@ namespace IPA.Loader internal readonly List InternalFeatures = new List(); + internal readonly HashSet UnloadedFeatures = new HashSet(); + + internal readonly List CreateFeaturesWhenLoaded = new List(); + /// /// A list of files (that aren't ) that are associated with this plugin. /// diff --git a/IPA.Loader/Loader/manifest.json b/IPA.Loader/Loader/manifest.json index a38fc719..60b78874 100644 --- a/IPA.Loader/Loader/manifest.json +++ b/IPA.Loader/Loader/manifest.json @@ -10,14 +10,12 @@ "name": "Beat Saber IPA", "version": "4.0.6", "icon": "IPA.icon_white.png", - "features": [ - "define-feature(print, IPA.Loader.Features.PrintFeature)", - "define-feature(debug, IPA.Loader.Features.DebugFeature)", - "define-feature(warn, IPA.Loader.Features.WarnFeature)", - "define-feature(no-update, IPA.Loader.Features.NoUpdateFeature)", - "define-feature(init-injector, IPA.Loader.Features.InitInjectorFeature)", - "define-feature(config-provider, IPA.Loader.Features.ConfigProviderFeature)" - ], + "features": { + "IPA.DefineFeature": { + "type": "IPA.Loader.Features.ConfigProviderFeature", + "name": "IPA.ConfigProvider" + } + }, "links": { "project-home": "https://beat-saber-modding-group.github.io/BeatSaber-IPA-Reloaded/index.html", "project-source": "https://github.com/beat-saber-modding-group/BeatSaber-IPA-Reloaded", diff --git a/IPA.Loader/Updating/BeatMods/Updater.cs b/IPA.Loader/Updating/BeatMods/Updater.cs index 200c8d0c..33b4596c 100644 --- a/IPA.Loader/Updating/BeatMods/Updater.cs +++ b/IPA.Loader/Updating/BeatMods/Updater.cs @@ -204,11 +204,6 @@ namespace IPA.Updating.BeatMods LocalPluginMeta = msinfo }; - if (msinfo.Features.FirstOrDefault(f => f is NoUpdateFeature) != null) - { // disable updating, by only matching self, so that dependencies can still be resolved - dep.Requirement = new Range(msinfo.Version.ToString()); - } - depList.Value.Add(dep); } } @@ -225,11 +220,6 @@ namespace IPA.Updating.BeatMods LocalPluginMeta = meta }; - if (meta.Features.FirstOrDefault(f => f is NoUpdateFeature) != null) - { // disable updating, by only matching self - dep.Requirement = new Range(meta.Version.ToString()); - } - depList.Value.Add(dep); } } @@ -246,11 +236,6 @@ namespace IPA.Updating.BeatMods LocalPluginMeta = meta }; - if (meta.Features.FirstOrDefault(f => f is NoUpdateFeature) != null) - { // disable updating, by only matching self - dep.Requirement = new Range(meta.Version.ToString()); - } - depList.Value.Add(dep); } } From b4fc0405185109ee71c408d0f277fc8da701c5d4 Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Sat, 22 Aug 2020 02:03:01 -0500 Subject: [PATCH 18/22] Bumped version --- IPA.Loader/Config/SelfConfig.cs | 2 +- IPA.Loader/Loader/manifest.json | 4 ++-- IPA/Program.cs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/IPA.Loader/Config/SelfConfig.cs b/IPA.Loader/Config/SelfConfig.cs index 2611a6cb..e682eaea 100644 --- a/IPA.Loader/Config/SelfConfig.cs +++ b/IPA.Loader/Config/SelfConfig.cs @@ -68,7 +68,7 @@ namespace IPA.Config } internal const string IPAName = "Beat Saber IPA"; - internal const string IPAVersion = "4.0.6.0"; + internal const string IPAVersion = "4.1.0.0"; // uses Updates.AutoUpdate, Updates.AutoCheckUpdates, YeetMods, Debug.ShowCallSource, Debug.ShowDebug, // Debug.CondenseModLogs diff --git a/IPA.Loader/Loader/manifest.json b/IPA.Loader/Loader/manifest.json index 60b78874..fe6717a4 100644 --- a/IPA.Loader/Loader/manifest.json +++ b/IPA.Loader/Loader/manifest.json @@ -5,10 +5,10 @@ "#![IPA.Loader.description.md]", "A mod loader specifically for Beat Saber." ], - "gameVersion": "1.8.0", + "gameVersion": "1.11.0", "id": "BSIPA", "name": "Beat Saber IPA", - "version": "4.0.6", + "version": "4.1.0", "icon": "IPA.icon_white.png", "features": { "IPA.DefineFeature": { diff --git a/IPA/Program.cs b/IPA/Program.cs index 0f95ca8e..9c6b100f 100644 --- a/IPA/Program.cs +++ b/IPA/Program.cs @@ -23,7 +23,7 @@ namespace IPA Unknown } - public const string FileVersion = "4.0.6.0"; + public const string FileVersion = "4.1.0.0"; public static Version Version => Assembly.GetEntryAssembly().GetName().Version; From 7d09f18299c3bf7829a2c22e5dd44e1289d6f071 Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Sat, 22 Aug 2020 02:08:40 -0500 Subject: [PATCH 19/22] Added custom deserialization for old features so that they don't totally break the load --- .../JsonConverters/FeaturesFieldConverter.cs | 31 +++++++++++++++++++ IPA.Loader/Loader/PluginManifest.cs | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 IPA.Loader/JsonConverters/FeaturesFieldConverter.cs diff --git a/IPA.Loader/JsonConverters/FeaturesFieldConverter.cs b/IPA.Loader/JsonConverters/FeaturesFieldConverter.cs new file mode 100644 index 00000000..97cccb18 --- /dev/null +++ b/IPA.Loader/JsonConverters/FeaturesFieldConverter.cs @@ -0,0 +1,31 @@ +using IPA.Logging; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IPA.JsonConverters +{ + internal class FeaturesFieldConverter : JsonConverter> + { + public override Dictionary ReadJson(JsonReader reader, Type objectType, Dictionary existingValue, bool hasExistingValue, JsonSerializer serializer) + { + if (reader.TokenType == JsonToken.StartArray) + { + _ = serializer.Deserialize(reader); + Logger.features.Warn("Encountered old features used. They no longer do anything, please move to the new format."); + return existingValue; + } + + return serializer.Deserialize>(reader); + } + + public override void WriteJson(JsonWriter writer, Dictionary value, JsonSerializer serializer) + { + serializer.Serialize(writer, value); + } + } +} diff --git a/IPA.Loader/Loader/PluginManifest.cs b/IPA.Loader/Loader/PluginManifest.cs index 405bf488..7361975e 100644 --- a/IPA.Loader/Loader/PluginManifest.cs +++ b/IPA.Loader/Loader/PluginManifest.cs @@ -40,7 +40,7 @@ namespace IPA.Loader [JsonProperty("conflictsWith", Required = Required.DisallowNull, ItemConverterType = typeof(SemverRangeConverter))] public Dictionary Conflicts = new Dictionary(); - [JsonProperty("features", Required = Required.DisallowNull)] + [JsonProperty("features", Required = Required.DisallowNull), JsonConverter(typeof(FeaturesFieldConverter))] public Dictionary Features = new Dictionary(); [JsonProperty("loadBefore", Required = Required.DisallowNull)] From ec36037b38fcfffd4ac587497e47c2c3934c9859 Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Sat, 22 Aug 2020 02:32:46 -0500 Subject: [PATCH 20/22] Updated links in manifest --- IPA.Loader/Loader/manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IPA.Loader/Loader/manifest.json b/IPA.Loader/Loader/manifest.json index fe6717a4..9eddc4b7 100644 --- a/IPA.Loader/Loader/manifest.json +++ b/IPA.Loader/Loader/manifest.json @@ -17,8 +17,8 @@ } }, "links": { - "project-home": "https://beat-saber-modding-group.github.io/BeatSaber-IPA-Reloaded/index.html", - "project-source": "https://github.com/beat-saber-modding-group/BeatSaber-IPA-Reloaded", + "project-home": "https://bsmg.github.io/BeatSaber-IPA-Reloaded/index.html", + "project-source": "https://github.com/bsmg/BeatSaber-IPA-Reloaded", "donate": "https://ko-fi.com/danike" }, "files": [ From a88ca4bb187c8abbd50ccf8c41c5e8bdcc11c868 Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Sun, 23 Aug 2020 23:10:18 -0500 Subject: [PATCH 21/22] Improved error handling with new features --- IPA.Loader/Loader/Features/Feature.cs | 10 ++++++++-- IPA.Loader/Loader/PluginLoader.cs | 16 ++++++++++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/IPA.Loader/Loader/Features/Feature.cs b/IPA.Loader/Loader/Features/Feature.cs index d51b94ea..b2c37052 100644 --- a/IPA.Loader/Loader/Features/Feature.cs +++ b/IPA.Loader/Loader/Features/Feature.cs @@ -106,6 +106,10 @@ namespace IPA.Loader.Features if (definingPlugin != declarer) return false; } + else + { + featureDelcarers.Add(name, definingPlugin); + } featureTypes.Add(name, type); return true; @@ -144,11 +148,13 @@ namespace IPA.Loader.Features // returns whether or not Initialize returned true, feature is always set when the thing exists public bool TryCreate(out Feature feature) { - feature = null; if (type == null) { if (!featureTypes.TryGetValue(Name, out type)) + { + feature = new EmptyFeature() { InvalidMessage = "No such feature type found", FeatureName = Name }; return false; + } } bool result; @@ -162,7 +168,7 @@ namespace IPA.Loader.Features catch (Exception e) { result = false; - feature = new EmptyFeature() { InvalidMessage = e.ToString() }; + feature = new EmptyFeature() { InvalidMessage = e.ToString(), FeatureName = Name }; } return result; } diff --git a/IPA.Loader/Loader/PluginLoader.cs b/IPA.Loader/Loader/PluginLoader.cs index b3b8facb..cbec90b8 100644 --- a/IPA.Loader/Loader/PluginLoader.cs +++ b/IPA.Loader/Loader/PluginLoader.cs @@ -878,11 +878,19 @@ namespace IPA.Loader var loaded = new HashSet(); foreach (var meta in PluginsMetadata) { - var exec = InitPlugin(meta, loaded); - if (exec != null) + try + { + var exec = InitPlugin(meta, loaded); + if (exec != null) + { + list.Add(exec); + loaded.Add(meta); + } + } + catch (Exception e) { - list.Add(exec); - loaded.Add(meta); + Logger.log.Critical($"Uncaught exception while loading pluign {meta.Name}:"); + Logger.log.Critical(e); } } From ee13166561f5beff390a03415e974467f6e06446 Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Sun, 23 Aug 2020 23:16:52 -0500 Subject: [PATCH 22/22] Moved DefineFeature main execution to BeforeInit --- .../Loader/Features/ConfigProviderFeature.cs | 2 +- IPA.Loader/Loader/Features/DefineFeature.cs | 4 ++-- IPA.Loader/Loader/Features/Feature.cs | 2 +- IPA.Loader/Loader/PluginLoader.cs | 18 +++++++++--------- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/IPA.Loader/Loader/Features/ConfigProviderFeature.cs b/IPA.Loader/Loader/Features/ConfigProviderFeature.cs index bceceaf7..61ab95f9 100644 --- a/IPA.Loader/Loader/Features/ConfigProviderFeature.cs +++ b/IPA.Loader/Loader/Features/ConfigProviderFeature.cs @@ -10,7 +10,7 @@ namespace IPA.Loader.Features private class DataModel { [JsonProperty("type", Required = Required.Always)] - public string TypeName; + public string TypeName = ""; } protected override bool Initialize(PluginMetadata meta, JObject featureData) diff --git a/IPA.Loader/Loader/Features/DefineFeature.cs b/IPA.Loader/Loader/Features/DefineFeature.cs index 1b08bfa5..9cba0a8c 100644 --- a/IPA.Loader/Loader/Features/DefineFeature.cs +++ b/IPA.Loader/Loader/Features/DefineFeature.cs @@ -13,7 +13,7 @@ namespace IPA.Loader.Features private class DataModel { [JsonProperty("type", Required = Required.Always)] - public string TypeName; + public string TypeName = ""; [JsonProperty("name", Required = Required.DisallowNull)] public string ActualName = null; @@ -40,7 +40,7 @@ namespace IPA.Loader.Features return PreregisterFeature(meta, data.Name); } - public override void AfterInit(PluginMetadata meta, object pluginInstance) + public override void BeforeInit(PluginMetadata meta) { Logger.features.Debug("Executing DefineFeature AfterInit"); diff --git a/IPA.Loader/Loader/Features/Feature.cs b/IPA.Loader/Loader/Features/Feature.cs index b2c37052..df70401e 100644 --- a/IPA.Loader/Loader/Features/Feature.cs +++ b/IPA.Loader/Loader/Features/Feature.cs @@ -42,7 +42,7 @@ namespace IPA.Loader.Features /// /// the plugin to be initialized /// whether or not to call the Init method - public virtual bool BeforeInit(PluginMetadata plugin) => true; + public virtual void BeforeInit(PluginMetadata plugin) { } /// /// Called after a plugin has been fully initialized, whether or not there is an `Init` method. This should never throw an exception. diff --git a/IPA.Loader/Loader/PluginLoader.cs b/IPA.Loader/Loader/PluginLoader.cs index cbec90b8..95038cfb 100644 --- a/IPA.Loader/Loader/PluginLoader.cs +++ b/IPA.Loader/Loader/PluginLoader.cs @@ -812,15 +812,14 @@ namespace IPA.Loader foreach (var feature in meta.Features) { - if (!feature.BeforeInit(meta)) + try { - Logger.loader.Warn( - $"Feature {feature?.FeatureName} denied plugin {meta.Name} from initializing! {feature?.InvalidMessage}"); - ignoredPlugins.Add(meta, new IgnoreReason(Reason.Feature) - { - ReasonText = $"Denied in {nameof(Feature.BeforeInit)} of feature {feature?.FeatureName}:\n\t{feature?.InvalidMessage}" - }); - return null; + feature.BeforeInit(meta); + } + catch (Exception e) + { + Logger.loader.Critical($"Feature errored in {nameof(Feature.BeforeInit)}:"); + Logger.loader.Critical(e); } } @@ -862,7 +861,8 @@ namespace IPA.Loader } catch (Exception e) { - Logger.loader.Critical($"Feature errored in {nameof(Feature.AfterInit)}: {e}"); + Logger.loader.Critical($"Feature errored in {nameof(Feature.AfterInit)}:"); + Logger.loader.Critical(e); } return exec;