Remove BepInEx.Common and merge with main BepInEx project

This commit is contained in:
Bepis committed 2018-07-26 01:58:35 +10:00
1 parent a6c9907d7a
commit 2b632fe173
4 files changed
+102 -8

No files matched your search

-1
View File
@@ -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>
-6
View File
@@ -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
View File
@@ -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
View File
@@ -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;
}
}
}