diff --git a/BSIPA-Meta/BSIPA-Meta.csproj b/BSIPA-Meta/BSIPA-Meta.csproj index 7d1e6a09..b355d8a4 100644 --- a/BSIPA-Meta/BSIPA-Meta.csproj +++ b/BSIPA-Meta/BSIPA-Meta.csproj @@ -20,10 +20,10 @@ x64 - 4 + Net4 - 3 + Net3 AnyCPU @@ -85,7 +85,7 @@ - + diff --git a/BSIPA.sln b/BSIPA.sln index 1e283126..d0fc87fe 100644 --- a/BSIPA.sln +++ b/BSIPA.sln @@ -49,138 +49,288 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BSIPA-Meta", "BSIPA-Meta\BS {2A1AF16B-27F1-46E0-9A95-181516BC1CB7} = {2A1AF16B-27F1-46E0-9A95-181516BC1CB7} EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Net3-Proxy", "Net3-Proxy\Net3-Proxy.csproj", "{642F52DA-90F9-40E3-8784-6964F36752FB}" +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|x64-Net4 = Verbose|x64-Net4 - Verbose|x86-Net4 = Verbose|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 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|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-Net4.ActiveCfg = Verbose|Any CPU - {14092533-98BB-40A4-9AFC-27BB75672A70}.Verbose|x86-Net4.Build.0 = Verbose|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|x64-Net4.ActiveCfg = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x64-Net4.Build.0 = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net4.ActiveCfg = Debug|Net4 - {5AD344F0-01A0-4CA8-92E5-9D095737744D}.Verbose|x86-Net4.Build.0 = Debug|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|x64-Net4.ActiveCfg = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x64-Net4.Build.0 = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net4.ActiveCfg = Debug|Net4 - {2A1AF16B-27F1-46E0-9A95-181516BC1CB7}.Verbose|x86-Net4.Build.0 = Debug|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|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-Net4.ActiveCfg = Verbose_Release|Win32 - {88609E16-731F-46C9-8139-6B1A7A83240D}.Verbose|x86-Net4.Build.0 = Verbose_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-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 {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 - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose_Release|x64-Net4.ActiveCfg = Release|Any CPU - {5F33B310-DC8D-4C0D-877E-BAC3908DE10F}.Verbose_Release|x86-Net4.ActiveCfg = Release|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Debug|x64-Net3.ActiveCfg = Debug|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Debug|x64-Net3.Build.0 = Debug|Any CPU {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Debug|x64-Net4.ActiveCfg = Debug|Any CPU {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Debug|x64-Net4.Build.0 = Debug|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Debug|x86-Net3.ActiveCfg = Debug|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Debug|x86-Net3.Build.0 = Debug|Any CPU {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Debug|x86-Net4.ActiveCfg = Debug|Any CPU {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Debug|x86-Net4.Build.0 = Debug|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Release|x64-Net3.ActiveCfg = Release|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Release|x64-Net3.Build.0 = Release|Any CPU {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Release|x64-Net4.ActiveCfg = Release|Any CPU {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Release|x64-Net4.Build.0 = Release|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Release|x86-Net3.ActiveCfg = Release|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Release|x86-Net3.Build.0 = Release|Any CPU {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Release|x86-Net4.ActiveCfg = Release|Any CPU {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Release|x86-Net4.Build.0 = Release|Any CPU - {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose|x64-Net4.ActiveCfg = Debug|Any CPU - {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose|x64-Net4.Build.0 = Debug|Any CPU - {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose|x86-Net4.ActiveCfg = Debug|Any CPU - {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose|x86-Net4.Build.0 = Debug|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose_Release|x64-Net3.ActiveCfg = Release|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose_Release|x64-Net3.Build.0 = Release|Any CPU {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose_Release|x64-Net4.ActiveCfg = Release|Any CPU {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose_Release|x64-Net4.Build.0 = Release|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose_Release|x86-Net3.ActiveCfg = Release|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose_Release|x86-Net3.Build.0 = Release|Any CPU {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose_Release|x86-Net4.ActiveCfg = Release|Any CPU {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose_Release|x86-Net4.Build.0 = Release|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose|x64-Net3.ActiveCfg = Debug|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose|x64-Net3.Build.0 = Debug|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose|x64-Net4.ActiveCfg = Debug|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose|x64-Net4.Build.0 = Debug|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose|x86-Net3.ActiveCfg = Debug|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose|x86-Net3.Build.0 = Debug|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose|x86-Net4.ActiveCfg = Debug|Any CPU + {E2CCDD2F-1D4F-4B06-9CD4-E0D2B9AE543A}.Verbose|x86-Net4.Build.0 = Debug|Any CPU + {23AB2621-A05C-4377-8418-85E6012C0BBE}.Debug|x64-Net3.ActiveCfg = Debug|Any CPU {23AB2621-A05C-4377-8418-85E6012C0BBE}.Debug|x64-Net4.ActiveCfg = Debug|Any CPU {23AB2621-A05C-4377-8418-85E6012C0BBE}.Debug|x64-Net4.Build.0 = Debug|Any CPU + {23AB2621-A05C-4377-8418-85E6012C0BBE}.Debug|x86-Net3.ActiveCfg = Debug|Any CPU {23AB2621-A05C-4377-8418-85E6012C0BBE}.Debug|x86-Net4.ActiveCfg = Debug|Any CPU + {23AB2621-A05C-4377-8418-85E6012C0BBE}.Release|x64-Net3.ActiveCfg = Release|Any CPU {23AB2621-A05C-4377-8418-85E6012C0BBE}.Release|x64-Net4.ActiveCfg = Release|Any CPU {23AB2621-A05C-4377-8418-85E6012C0BBE}.Release|x64-Net4.Build.0 = Release|Any CPU + {23AB2621-A05C-4377-8418-85E6012C0BBE}.Release|x86-Net3.ActiveCfg = Release|Any CPU {23AB2621-A05C-4377-8418-85E6012C0BBE}.Release|x86-Net4.ActiveCfg = Release|Any CPU - {23AB2621-A05C-4377-8418-85E6012C0BBE}.Verbose|x64-Net4.ActiveCfg = Debug|Any CPU - {23AB2621-A05C-4377-8418-85E6012C0BBE}.Verbose|x64-Net4.Build.0 = Debug|Any CPU - {23AB2621-A05C-4377-8418-85E6012C0BBE}.Verbose|x86-Net4.ActiveCfg = Debug|Any CPU + {23AB2621-A05C-4377-8418-85E6012C0BBE}.Verbose_Release|x64-Net3.ActiveCfg = Release|Any CPU {23AB2621-A05C-4377-8418-85E6012C0BBE}.Verbose_Release|x64-Net4.ActiveCfg = Release|Any CPU {23AB2621-A05C-4377-8418-85E6012C0BBE}.Verbose_Release|x64-Net4.Build.0 = Release|Any CPU + {23AB2621-A05C-4377-8418-85E6012C0BBE}.Verbose_Release|x86-Net3.ActiveCfg = Release|Any CPU {23AB2621-A05C-4377-8418-85E6012C0BBE}.Verbose_Release|x86-Net4.ActiveCfg = Release|Any CPU + {23AB2621-A05C-4377-8418-85E6012C0BBE}.Verbose|x64-Net3.ActiveCfg = Debug|Any CPU + {23AB2621-A05C-4377-8418-85E6012C0BBE}.Verbose|x64-Net4.ActiveCfg = Debug|Any CPU + {23AB2621-A05C-4377-8418-85E6012C0BBE}.Verbose|x64-Net4.Build.0 = Debug|Any CPU + {23AB2621-A05C-4377-8418-85E6012C0BBE}.Verbose|x86-Net3.ActiveCfg = Debug|Any CPU + {23AB2621-A05C-4377-8418-85E6012C0BBE}.Verbose|x86-Net4.ActiveCfg = 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|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-Net4.ActiveCfg = Verbose|x86-Net4 - {880A3560-82CD-4836-996B-11BEFE6B44DB}.Verbose|x86-Net4.Build.0 = Verbose|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 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/IPA.Injector/IPA.Injector.csproj b/IPA.Injector/IPA.Injector.csproj index 7b19e83d..00f52622 100644 --- a/IPA.Injector/IPA.Injector.csproj +++ b/IPA.Injector/IPA.Injector.csproj @@ -75,6 +75,10 @@ {5ad344f0-01a0-4ca8-92e5-9d095737744d} IPA.Loader + + {642F52DA-90F9-40E3-8784-6964F36752FB} + Net3-Proxy + @@ -118,6 +122,9 @@ 1.2.0 + + 0.3.1 + diff --git a/IPA.Loader/Config/Config.cs b/IPA.Loader/Config/Config.cs index 126c2d50..3832b8f2 100644 --- a/IPA.Loader/Config/Config.cs +++ b/IPA.Loader/Config/Config.cs @@ -5,6 +5,10 @@ using System.Linq; using System.Reflection; using IPA.Config.ConfigProviders; using IPA.Utilities; +#if NET3 +using Net3_Proxy; +using Path = Net3_Proxy.Path; +#endif namespace IPA.Config { diff --git a/IPA.Loader/Config/ConfigProviders/JsonConfigProvider.cs b/IPA.Loader/Config/ConfigProviders/JsonConfigProvider.cs index be81baea..476c76d3 100644 --- a/IPA.Loader/Config/ConfigProviders/JsonConfigProvider.cs +++ b/IPA.Loader/Config/ConfigProviders/JsonConfigProvider.cs @@ -18,8 +18,10 @@ namespace IPA.Config.ConfigProviders private JObject jsonObj; +#if NET4 // TODO: create a wrapper that allows empty object creation public dynamic Dynamic => jsonObj; +#endif public bool HasChanged { get; private set; } public bool InMemoryChanged { get; set; } @@ -72,14 +74,18 @@ namespace IPA.Config.ConfigProviders { jsonObj.PropertyChanged += JsonObj_PropertyChanged; jsonObj.ListChanged += JsonObj_ListChanged; +#if NET4 jsonObj.CollectionChanged += JsonObj_CollectionChanged; +#endif } +#if NET4 private void JsonObj_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { HasChanged = true; InMemoryChanged = true; } +#endif private void JsonObj_ListChanged(object sender, ListChangedEventArgs e) { diff --git a/IPA.Loader/Config/IConfigProvider.cs b/IPA.Loader/Config/IConfigProvider.cs index 387c30c4..852e348b 100644 --- a/IPA.Loader/Config/IConfigProvider.cs +++ b/IPA.Loader/Config/IConfigProvider.cs @@ -21,13 +21,15 @@ namespace IPA.Config /// the object containing the data to save void Store(T obj); +#if NET4 /// /// Gets a dynamic object providing access to the configuration. /// /// a dynamically bound object to use to access config values directly dynamic Dynamic { get; } +#endif - #region State getters +#region State getters /// /// Returns if object has changed since the last save /// @@ -56,6 +58,6 @@ namespace IPA.Config /// Loads the state of the file on disk. /// void Load(); - #endregion +#endregion } } diff --git a/IPA.Loader/Config/ModPrefs.cs b/IPA.Loader/Config/ModPrefs.cs index ba255d9c..a719db6b 100644 --- a/IPA.Loader/Config/ModPrefs.cs +++ b/IPA.Loader/Config/ModPrefs.cs @@ -2,6 +2,9 @@ using System.Globalization; using System.IO; using IPA.Loader; +#if NET3 +using Path = Net3_Proxy.Path; +#endif namespace IPA.Config { diff --git a/IPA.Loader/IPA.Loader.csproj b/IPA.Loader/IPA.Loader.csproj index d08415aa..fda47cea 100644 --- a/IPA.Loader/IPA.Loader.csproj +++ b/IPA.Loader/IPA.Loader.csproj @@ -78,6 +78,12 @@ False + + + {642F52DA-90F9-40E3-8784-6964F36752FB} + Net3-Proxy + + @@ -149,6 +155,9 @@ 1.2.0 + + 0.3.1 + diff --git a/IPA.Loader/Loader/Features/Feature.cs b/IPA.Loader/Loader/Features/Feature.cs index effd5dae..5817bc74 100644 --- a/IPA.Loader/Loader/Features/Feature.cs +++ b/IPA.Loader/Loader/Features/Feature.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; using System.Text; +#if NET3 +using Net3_Proxy; +#endif namespace IPA.Loader.Features { diff --git a/IPA.Loader/Loader/PluginInitInjector.cs b/IPA.Loader/Loader/PluginInitInjector.cs index 053bf2ce..7dc2679c 100644 --- a/IPA.Loader/Loader/PluginInitInjector.cs +++ b/IPA.Loader/Loader/PluginInitInjector.cs @@ -5,6 +5,9 @@ using System.Reflection; using IPA.Config; using IPA.Logging; using IPA.Utilities; +#if NET3 +using Net3_Proxy; +#endif namespace IPA.Loader { diff --git a/IPA.Loader/Loader/PluginLoader.cs b/IPA.Loader/Loader/PluginLoader.cs index e3e75ea2..d30111f7 100644 --- a/IPA.Loader/Loader/PluginLoader.cs +++ b/IPA.Loader/Loader/PluginLoader.cs @@ -11,6 +11,11 @@ using System.Reflection; using System.Text.RegularExpressions; using System.Threading.Tasks; using Version = SemVer.Version; +#if NET3 +using Net3_Proxy; +using Path = Net3_Proxy.Path; +using File = Net3_Proxy.File; +#endif namespace IPA.Loader { @@ -19,7 +24,7 @@ namespace IPA.Loader /// public class PluginLoader { - internal static Task LoadTask() => Task.Run(() => + internal static Task LoadTask() => Task.Factory.StartNew(() => { LoadMetadata(); diff --git a/IPA.Loader/Loader/PluginManager.cs b/IPA.Loader/Loader/PluginManager.cs index d30f1c1d..05d0d8e4 100644 --- a/IPA.Loader/Loader/PluginManager.cs +++ b/IPA.Loader/Loader/PluginManager.cs @@ -13,6 +13,11 @@ using Mono.Cecil; using UnityEngine; using Logger = IPA.Logging.Logger; using static IPA.Loader.PluginLoader; +#if NET3 +using Net3_Proxy; +using Path = Net3_Proxy.Path; +using File = Net3_Proxy.File; +#endif namespace IPA.Loader { diff --git a/IPA.Loader/Logging/Printers/GZFilePrinter.cs b/IPA.Loader/Logging/Printers/GZFilePrinter.cs index 0eafa958..64968295 100644 --- a/IPA.Loader/Logging/Printers/GZFilePrinter.cs +++ b/IPA.Loader/Logging/Printers/GZFilePrinter.cs @@ -4,6 +4,10 @@ using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Text.RegularExpressions; +#if NET3 +using Net3_Proxy; +using Path = Net3_Proxy.Path; +#endif namespace IPA.Logging.Printers { diff --git a/IPA.Loader/Logging/Printers/PluginSubLogPrinter.cs b/IPA.Loader/Logging/Printers/PluginSubLogPrinter.cs index 2b0e06dc..6e07c6f7 100644 --- a/IPA.Loader/Logging/Printers/PluginSubLogPrinter.cs +++ b/IPA.Loader/Logging/Printers/PluginSubLogPrinter.cs @@ -1,6 +1,9 @@ using System; using System.IO; using IPA.Utilities; +#if NET3 +using Path = Net3_Proxy.Path; +#endif namespace IPA.Logging.Printers { diff --git a/IPA.Loader/Logging/StdoutInterceptor.cs b/IPA.Loader/Logging/StdoutInterceptor.cs index e1d5fa29..5ef6aa71 100644 --- a/IPA.Loader/Logging/StdoutInterceptor.cs +++ b/IPA.Loader/Logging/StdoutInterceptor.cs @@ -121,8 +121,8 @@ namespace IPA.Logging var console = typeof(Console); var resetColor = console.GetMethod("ResetColor"); var foregroundProperty = console.GetProperty("ForegroundColor"); - var setFg = foregroundProperty.SetMethod; - var getFg = foregroundProperty.GetMethod; + var setFg = foregroundProperty.GetSetMethod(); + var getFg = foregroundProperty.GetGetMethod(); harmony.Patch(resetColor, transpiler: new HarmonyMethod(typeof(ConsoleHarmonyPatches), "PatchResetColor")); harmony.Patch(setFg, transpiler: new HarmonyMethod(typeof(ConsoleHarmonyPatches), "PatchSetForegroundColor")); diff --git a/IPA.Loader/Utilities/BeatSaber.cs b/IPA.Loader/Utilities/BeatSaber.cs index 2f9e42c5..15fd15c8 100644 --- a/IPA.Loader/Utilities/BeatSaber.cs +++ b/IPA.Loader/Utilities/BeatSaber.cs @@ -2,7 +2,9 @@ using System.IO; using System.Reflection; using UnityEngine; -using Version = SemVer.Version; +#if NET3 +using Path = Net3_Proxy.Path; +#endif namespace IPA.Utilities { diff --git a/IPA.Loader/Utilities/Utils.cs b/IPA.Loader/Utilities/Utils.cs index 6f71ecd1..a9270b83 100644 --- a/IPA.Loader/Utilities/Utils.cs +++ b/IPA.Loader/Utilities/Utils.cs @@ -1,6 +1,9 @@ using System; using System.IO; using System.Text; +#if NET3 +using File = Net3_Proxy.File; +#endif namespace IPA.Utilities { diff --git a/Net3-Proxy/Extensions.cs b/Net3-Proxy/Extensions.cs new file mode 100644 index 00000000..64386279 --- /dev/null +++ b/Net3-Proxy/Extensions.cs @@ -0,0 +1,167 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Security.Permissions; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Net3_Proxy +{ + public static class Extensions + { + public static T GetCustomAttribute(this ParameterInfo element) where T : Attribute + => (T)GetCustomAttribute(element, typeof(T)); + + public static Attribute GetCustomAttribute(this MemberInfo element, Type attributeType) + => Attribute.GetCustomAttribute(element, attributeType); + + public static Attribute GetCustomAttribute(this ParameterInfo element, Type attributeType) + => Attribute.GetCustomAttribute(element, attributeType); + + public static StringBuilder Clear(this StringBuilder sb) + => sb.Remove(0, sb.Length); + } + + public static class DirectoryInfoExtensions + { + public static IEnumerable EnumerateFiles(this DirectoryInfo self) + { + return self.EnumerateFiles("*", SearchOption.TopDirectoryOnly); + } + + public static IEnumerable EnumerateFiles(this DirectoryInfo self, string searchPattern) + { + return self.EnumerateFiles(searchPattern, SearchOption.TopDirectoryOnly); + } + + public static IEnumerable EnumerateFiles(this DirectoryInfo self, string searchPattern, SearchOption searchOption) + { + if (searchPattern == null) + { + throw new ArgumentNullException("searchPattern"); + } + return CreateEnumerateFilesIterator(self, searchPattern, searchOption); + } + + + private static IEnumerable CreateEnumerateFilesIterator(DirectoryInfo self, string searchPattern, SearchOption searchOption) + { + foreach (string fileName in Directory.GetFiles(self.FullName, searchPattern, searchOption)) + yield return new FileInfo(fileName); + yield break; + } + } + + public static class StreamExtensions + { + [ComVisible(false)] + [HostProtection(SecurityAction.LinkDemand, ExternalThreading = true)] + public static Task CopyToAsync(this Stream src, Stream destination) => CopyToAsync(src, destination, 81920); + + [ComVisible(false)] + [HostProtection(SecurityAction.LinkDemand, ExternalThreading = true)] + public static Task CopyToAsync(this Stream src, Stream destination, int bufferSize) => CopyToAsync(src, destination, bufferSize, CancellationToken.None); + + [ComVisible(false)] + [HostProtection(SecurityAction.LinkDemand, ExternalThreading = true)] + public static Task CopyToAsync(this Stream src, Stream destination, int bufferSize, CancellationToken cancellationToken) + { + if (destination == null) + { + throw new ArgumentNullException("destination"); + } + if (bufferSize <= 0) + { + throw new ArgumentOutOfRangeException("bufferSize", "Positive number required."); + } + if (!src.CanRead && !src.CanWrite) + { + throw new ObjectDisposedException(null, "Cannot access a closed Stream."); + } + if (!destination.CanRead && !destination.CanWrite) + { + throw new ObjectDisposedException("destination", "Cannot access a closed Stream."); + } + if (!src.CanRead) + { + throw new NotSupportedException("Stream does not support reading."); + } + if (!destination.CanWrite) + { + throw new NotSupportedException("Stream does not support writing."); + } + return CopyToAsyncInternal(src, destination, bufferSize, cancellationToken); + } + + private static async Task CopyToAsyncInternal(Stream src, Stream destination, int bufferSize, CancellationToken cancellationToken) + { + byte[] buffer = new byte[bufferSize]; + int bytesRead; + while ((bytesRead = await src.ReadAsync(buffer, 0, buffer.Length, cancellationToken)) != 0) + { + await destination.WriteAsync(buffer, 0, bytesRead, cancellationToken); + } + } + + [ComVisible(false)] + [HostProtection(SecurityAction.LinkDemand, ExternalThreading = true)] + public static Task ReadAsync(this Stream src, byte[] buffer, int offset, int count) + { + return ReadAsync(src, buffer, offset, count, CancellationToken.None); + } + + [ComVisible(false)] + [HostProtection(SecurityAction.LinkDemand, ExternalThreading = true)] + public static Task ReadAsync(this Stream src, byte[] buffer, int offset, int count, CancellationToken cancellationToken) + { + if (!cancellationToken.IsCancellationRequested) + { + return BeginEndReadAsync(src, buffer, offset, count); + } + return new Task(() => 0, cancellationToken); + } + + private static Task BeginEndReadAsync(Stream src, byte[] buffer, int offset, int count) + => Task.Factory.FromAsync( + (byte[] buffer_, int offset_, int count_, AsyncCallback callback, object state) => + src.BeginRead(buffer_, offset_, count_, callback, state), + (IAsyncResult asyncResult) => src.EndRead(asyncResult), + buffer, + offset, + count, + new object()); + + [ComVisible(false)] + [HostProtection(SecurityAction.LinkDemand, ExternalThreading = true)] + public static Task WriteAsync(this Stream src, byte[] buffer, int offset, int count) + { + return WriteAsync(src, buffer, offset, count, CancellationToken.None); + } + + [ComVisible(false)] + [HostProtection(SecurityAction.LinkDemand, ExternalThreading = true)] + public static Task WriteAsync(this Stream src, byte[] buffer, int offset, int count, CancellationToken cancellationToken) + { + if (!cancellationToken.IsCancellationRequested) + { + return BeginEndWriteAsync(src, buffer, offset, count); + } + return new Task(() => 0, cancellationToken); + } + + private static Task BeginEndWriteAsync(Stream src, byte[] buffer, int offset, int count) + => Task.Factory.FromAsync( + (byte[] buffer_, int offset_, int count_, AsyncCallback callback, object state) => + src.BeginWrite(buffer_, offset_, count_, callback, state), + (IAsyncResult asyncResult) => src.EndWrite(asyncResult), + buffer, + offset, + count, + new object()); + + } +} diff --git a/Net3-Proxy/File.cs b/Net3-Proxy/File.cs new file mode 100644 index 00000000..abd23c19 --- /dev/null +++ b/Net3-Proxy/File.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO; +using OgFile = System.IO.File; + +namespace Net3_Proxy +{ + public static class File + { + public static string ReadAllText(string fn) => OgFile.ReadAllText(fn); + public static string ReadAllText(string fn, Encoding enc) => OgFile.ReadAllText(fn, enc); + public static bool Exists(string fn) => OgFile.Exists(fn); + public static void Delete(string fn) => OgFile.Delete(fn); + public static void AppendAllLines(string path, IEnumerable contents) + { + Path.Validate(path); + if (contents == null) + return; + using (TextWriter textWriter = new StreamWriter(path, true)) + foreach (string value in contents) + textWriter.WriteLine(value); + } + public static string[] ReadAllLines(string p) => OgFile.ReadAllLines(p); + } +} diff --git a/Net3-Proxy/IReadOnlyList.cs b/Net3-Proxy/IReadOnlyList.cs new file mode 100644 index 00000000..c1690ac0 --- /dev/null +++ b/Net3-Proxy/IReadOnlyList.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Net3_Proxy +{ + + public class IReadOnlyList : IEnumerable + { + private IList list; + + private IReadOnlyList(IList lst) + { + list = lst; + } + + public IEnumerator GetEnumerator() => list.GetEnumerator(); + + IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable)list).GetEnumerator(); + + public int Count => list.Count; + + public T this[int index] => list[index]; + + public static implicit operator IReadOnlyList(List list) => new IReadOnlyList(list); + } +} diff --git a/Net3-Proxy/Net3-Proxy.csproj b/Net3-Proxy/Net3-Proxy.csproj new file mode 100644 index 00000000..e05dcfd2 --- /dev/null +++ b/Net3-Proxy/Net3-Proxy.csproj @@ -0,0 +1,56 @@ + + + + + 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 + + + + \ No newline at end of file diff --git a/Net3-Proxy/Path.cs b/Net3-Proxy/Path.cs new file mode 100644 index 00000000..97a2a235 --- /dev/null +++ b/Net3-Proxy/Path.cs @@ -0,0 +1,56 @@ +using System; +using System.Linq; +using OgPath = System.IO.Path; + +namespace Net3_Proxy +{ + public static class Path + { + internal static void Validate(string path) + { + Path.Validate(path, "path"); + } + + internal static void Validate(string path, string parameterName) + { + if (path == null) + { + throw new ArgumentNullException(parameterName); + } + if (Utils.IsNullOrWhiteSpace(path)) + { + throw new ArgumentException("Path is empty"); + } + if (path.IndexOfAny(OgPath.GetInvalidPathChars()) != -1) + { + throw new ArgumentException("Path contains invalid chars"); + } + if (Environment.OSVersion.Platform < PlatformID.Unix) + { + int num = path.IndexOf(':'); + if (num >= 0 && num != 1) + { + throw new ArgumentException(parameterName); + } + } + } + + public static string GetFullPath(string p) => OgPath.GetFullPath(p); + public static string GetFileNameWithoutExtension(string p) => OgPath.GetFileNameWithoutExtension(p); + public static string GetFileName(string p) => OgPath.GetFileName(p); + public static string GetDirectoryName(string p) => OgPath.GetDirectoryName(p); + + public static string Combine(string s) => s; + public static string Combine(string s, string d) => OgPath.Combine(s, d); + public static string Combine(string s, string d, string f) => Combine(s, Combine(d, f)); + public static string Combine(string s, string d, string f, string g) => Combine(Combine(s, d), Combine(f, g)); + public static string Combine(params string[] parts) + { + if (parts.Length == 0) return ""; + var begin = parts[0]; + foreach (var p in parts.Skip(1)) + begin = Combine(begin, p); + return begin; + } + } +} diff --git a/Net3-Proxy/Properties/AssemblyInfo.cs b/Net3-Proxy/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..109d9633 --- /dev/null +++ b/Net3-Proxy/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Net3-Proxy")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Net3-Proxy")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("642f52da-90f9-40e3-8784-6964f36752fb")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Net3-Proxy/Tuple.cs b/Net3-Proxy/Tuple.cs new file mode 100644 index 00000000..5caebc5e --- /dev/null +++ b/Net3-Proxy/Tuple.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Net3_Proxy +{ + public static class Tuple + { + public static Tuple Create(T1 i1, T2 i2) + => new Tuple(i1, i2); + + internal static int CombineHashCodes(int h1, int h2) + { + return (h1 << 5) + h1 ^ h2; + } + } + + [Serializable] + public class Tuple : IComparable + { + public T1 Item1 { get; private set; } + public T2 Item2 { get; private set; } + + public Tuple(T1 item1, T2 item2) + { + Item1 = item1; + Item2 = item2; + } + + public override bool Equals(object obj) + => obj is Tuple tup + && Equals(Item1, tup.Item1) + && Equals(Item2, tup.Item2); + + int IComparable.CompareTo(object obj) + { + if (obj == null) return 1; + var tup = obj as Tuple; + if (tup == null) throw new ArgumentException($"Argument must be of type {GetType()}.", "other"); + int num = Comparer.Default.Compare(Item1, tup.Item1); + if (num != 0) return num; + return Comparer.Default.Compare(Item2, tup.Item2); + } + + public override int GetHashCode() => + Tuple.CombineHashCodes(EqualityComparer.Default.GetHashCode(Item1), EqualityComparer.Default.GetHashCode(Item2)); + + public override string ToString() => + $"({Item1}, {Item2})"; + } +} diff --git a/Net3-Proxy/Utils.cs b/Net3-Proxy/Utils.cs new file mode 100644 index 00000000..9c0c66c4 --- /dev/null +++ b/Net3-Proxy/Utils.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Net3_Proxy +{ + internal static class Utils + { + public static bool IsNullOrWhiteSpace(string value) + { + if (value == null) + { + return true; + } + for (int i = 0; i < value.Length; i++) + { + if (!char.IsWhiteSpace(value[i])) + { + return false; + } + } + return true; + } + } +}