Sfoglia il codice sorgente

Remove BepInEx.Common and merge with main BepInEx project

Bepis 5 anni fa
parent
commit
2b632fe173
4 ha cambiato i file con 102 aggiunte e 8 eliminazioni
  1. 0 1
      BepInEx.Patcher/BepInEx.Patcher.csproj
  2. 0 6
      BepInEx.sln
  3. 1 1
      BepInEx/BepInEx.csproj
  4. 101 0
      BepInEx/Utility.cs

+ 0 - 1
BepInEx.Patcher/BepInEx.Patcher.csproj

@@ -66,7 +66,6 @@
   <ItemGroup>
     <EmbeddedResource Include="..\bin\patcher\BepInEx.Bootstrap.dll" />
   </ItemGroup>
-  <Import Project="..\BepInEx.Common\BepInEx.Common.projitems" Label="Shared" />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
     <PropertyGroup>

+ 0 - 6
BepInEx.sln

@@ -10,15 +10,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BepInEx.Patcher", "BepInEx.
 		{4FFBA620-F5ED-47F9-B90C-DAD1316FD9B9} = {4FFBA620-F5ED-47F9-B90C-DAD1316FD9B9}
 	EndProjectSection
 EndProject
-Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "BepInEx.Common", "BepInEx.Common\BepInEx.Common.shproj", "{D8DEEEF7-28F5-4F13-A004-C581CE051CDC}"
-EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BepInEx.Bootstrap", "BepInEx.Bootstrap\BepInEx.Bootstrap.csproj", "{6E6BC1E5-5BE8-4566-B3AE-52C4CB218AEB}"
 EndProject
 Global
-	GlobalSection(SharedMSBuildProjectFiles) = preSolution
-		BepInEx.Common\BepInEx.Common.projitems*{4ffba620-f5ed-47f9-b90c-dad1316fd9b9}*SharedItemsImports = 4
-		BepInEx.Common\BepInEx.Common.projitems*{d8deeef7-28f5-4f13-a004-c581ce051cdc}*SharedItemsImports = 13
-	EndGlobalSection
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|v2017 = Debug|v2017
 		Debug|v4 = Debug|v4

+ 1 - 1
BepInEx/BepInEx.csproj

@@ -74,8 +74,8 @@
     <Compile Include="Paths.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Bootstrap\TypeLoader.cs" />
+    <Compile Include="Utility.cs" />
   </ItemGroup>
   <ItemGroup />
-  <Import Project="..\BepInEx.Common\BepInEx.Common.projitems" Label="Shared" />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 </Project>

+ 101 - 0
BepInEx/Utility.cs

@@ -0,0 +1,101 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+
+namespace BepInEx.Common
+{
+    /// <summary>
+    /// Generic helper properties and methods.
+    /// </summary>
+    public static class Utility
+    {
+        /// <summary>
+        /// Combines multiple paths together, as the specfic method is not availble in .NET 3.5.
+        /// </summary>
+        /// <param name="parts">The multiple paths to combine together.</param>
+        /// <returns>A combined path.</returns>
+        public static string CombinePaths(params string[] parts) => parts.Aggregate(Path.Combine);
+
+		/// <summary>
+		/// Tries to parse a bool, with a default value if unable to parse.
+		/// </summary>
+		/// <param name="input">The string to parse</param>
+		/// <param name="defaultValue">The value to return if parsing is unsuccessful.</param>
+		/// <returns>Boolean value of input if able to be parsed, otherwise default value.</returns>
+	    public static bool SafeParseBool(string input, bool defaultValue = false)
+	    {
+		    return bool.TryParse(input, out bool result) ? result : defaultValue;
+	    }
+
+        /// <summary>
+        /// Converts a file path into a UnityEngine.WWW format.
+        /// </summary>
+        /// <param name="path">The file path to convert.</param>
+        /// <returns>A converted file path.</returns>
+        public static string ConvertToWWWFormat(string path)
+        {
+            return $"file://{path.Replace('\\', '/')}";
+        }
+
+        /// <summary>
+        /// Indicates whether a specified string is null, empty, or consists only of white-space characters.
+        /// </summary>
+        /// <param name="self">The string to test.</param>
+        /// <returns>True if the value parameter is null or empty, or if value consists exclusively of white-space characters.</returns>
+        public static bool IsNullOrWhiteSpace(this string self)
+        {
+            return self == null || self.Trim().Length == 0;
+        }
+
+        public static IEnumerable<TNode> TopologicalSort<TNode>(IEnumerable<TNode> nodes, Func<TNode, IEnumerable<TNode>> dependencySelector)
+        {
+			List<TNode> nodeQueue = new List<TNode>(nodes);
+			List<TNode> sorted = new List<TNode>();
+
+	        while (nodeQueue.Count > 0)
+	        {
+		        List<TNode> nextBatch = nodeQueue.Where(x => !dependencySelector(x).Except(sorted).Any()).ToList();
+
+				if (!nextBatch.Any())
+					throw new Exception("Cyclic Dependency:\r\n" + 
+					                     nodeQueue.Select(x => x.ToString()).Aggregate((a , b) => $"{a}\r\n{b}"));
+
+				sorted.AddRange(nextBatch);
+
+		        foreach (TNode item in nextBatch)
+			        nodeQueue.Remove(item);
+	        }
+
+	        return sorted;
+        }
+
+        /// <summary>
+        /// Try to resolve and load the given assembly DLL.
+        /// </summary>
+        /// <param name="assemblyName">Name of the assembly, of the type <see cref="AssemblyName" />.</param>
+        /// <param name="directory">Directory to search the assembly from.</param>
+        /// <param name="assembly">The loaded assembly.</param>
+        /// <returns>True, if the assembly was found and loaded. Otherwise, false.</returns>
+        public static bool TryResolveDllAssembly(AssemblyName assemblyName, string directory, out Assembly assembly)
+        {
+            assembly = null;
+            string path = Path.Combine(directory, $"{assemblyName.Name}.dll");
+
+            if (!File.Exists(path))
+                return false;
+
+            try
+            {
+                assembly = Assembly.LoadFile(path);
+            }
+            catch (Exception)
+            {
+                return false;
+            }
+
+            return true;
+        }
+    }
+}