using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Threading;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Core.Logging.Interpolation;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using Costura;
using CrimsonSQL.API;
using CrimsonSQL.Services;
using CrimsonSQL.Structs;
using CrimsonSQL.Utility;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using MySqlConnector;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("CrimsonSQL")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("A V Rising Framework for using MySQL")]
[assembly: AssemblyFileVersion("1.3.2.0")]
[assembly: AssemblyInformationalVersion("1.3.2+Branch.master.Sha.3c43bb4153ff262f81a14d1a0736c5ad21c86b8d.3c43bb4153ff262f81a14d1a0736c5ad21c86b8d")]
[assembly: AssemblyProduct("CrimsonSQL")]
[assembly: AssemblyTitle("CrimsonSQL")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.3.2.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
internal class <Module>
{
static <Module>()
{
AssemblyLoader.Attach();
}
}
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace CrimsonSQL
{
[BepInPlugin("CrimsonSQL", "CrimsonSQL", "1.3.2")]
public class Plugin : BasePlugin
{
private Harmony _harmony;
public static Settings Settings;
internal static Plugin Instance { get; private set; }
public static Harmony Harmony => Instance._harmony;
public static ManualLogSource LogInstance => ((BasePlugin)Instance).Log;
public static SQLService SQLService { get; private set; }
public override void Load()
{
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Expected O, but got Unknown
Instance = this;
string[] manifestResourceNames = Assembly.GetExecutingAssembly().GetManifestResourceNames();
LogInstance.LogDebug((object)"=== Embedded Resources ===");
string[] array = manifestResourceNames;
foreach (string text in array)
{
LogInstance.LogDebug((object)text);
}
LogInstance.LogDebug((object)"========================");
Settings = default(Settings);
Settings.InitConfig();
AssemblyResolver.Resolve();
_harmony = new Harmony("CrimsonSQL");
_harmony.PatchAll(Assembly.GetExecutingAssembly());
if (Settings.MySQLConfigured)
{
SQLService = new SQLService();
}
}
public override bool Unload()
{
Harmony harmony = _harmony;
if (harmony != null)
{
harmony.UnpatchSelf();
}
return true;
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "CrimsonSQL";
public const string PLUGIN_NAME = "CrimsonSQL";
public const string PLUGIN_VERSION = "1.3.2";
}
}
namespace CrimsonSQL.Utility
{
public static class AssemblyResolver
{
public static void Resolve()
{
Assembly assembly = Assembly.GetExecutingAssembly();
AppDomain.CurrentDomain.AssemblyResolve += delegate(object? sender, ResolveEventArgs args)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Expected O, but got Unknown
//IL_00be: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Expected O, but got Unknown
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Expected O, but got Unknown
ManualLogSource logInstance = Plugin.LogInstance;
bool flag = default(bool);
BepInExDebugLogInterpolatedStringHandler val = new BepInExDebugLogInterpolatedStringHandler(23, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Attempting to resolve: ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(args.Name);
}
logInstance.LogDebug(val);
string name = args.Name;
if (name == null)
{
goto IL_00a8;
}
string text;
if (name.StartsWith("MySqlConnector"))
{
text = "CrimsonSQL.MySqlConnector.dll";
}
else if (name.StartsWith("System.Diagnostics.DiagnosticSource"))
{
text = "CrimsonSQL.System.Diagnostics.DiagnosticSource.dll";
}
else if (name.StartsWith("System.Security.Permissions"))
{
text = "CrimsonSQL.System.Security.Permissions.dll";
}
else if (name.StartsWith("System.Configuration.ConfigurationManager"))
{
text = "CrimsonSQL.System.Configuration.ConfigurationManager.dll";
}
else
{
if (!name.StartsWith("System.Text.Encoding.CodePages"))
{
goto IL_00a8;
}
text = "CrimsonSQL.System.Text.Encoding.CodePages.dll";
}
goto IL_00ab;
IL_00ab:
string text2 = text;
if (text2 != null)
{
ManualLogSource logInstance2 = Plugin.LogInstance;
val = new BepInExDebugLogInterpolatedStringHandler(25, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Resource name mapped to: ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(text2);
}
logInstance2.LogDebug(val);
using Stream stream = assembly.GetManifestResourceStream(text2);
ManualLogSource logInstance3 = Plugin.LogInstance;
val = new BepInExDebugLogInterpolatedStringHandler(14, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Stream found: ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<bool>(stream != null);
}
logInstance3.LogDebug(val);
if (stream != null)
{
byte[] array = new byte[stream.Length];
stream.Read(array, 0, array.Length);
return Assembly.Load(array);
}
}
return null;
IL_00a8:
text = null;
goto IL_00ab;
};
}
}
}
namespace CrimsonSQL.Structs
{
[StructLayout(LayoutKind.Sequential, Size = 1)]
public readonly struct Settings
{
public static ConfigEntry<string> DatabaseName { get; private set; }
public static ConfigEntry<string> Host { get; private set; }
public static ConfigEntry<int> Port { get; private set; }
public static ConfigEntry<string> UserName { get; private set; }
public static ConfigEntry<string> Password { get; private set; }
public static ConfigEntry<string> Parameters { get; private set; }
public static bool MySQLConfigured { get; set; }
public static void InitConfig()
{
DatabaseName = InitConfigEntry("ServerConnection", "DatabaseName", "", "The name of your MySQL database.");
Host = InitConfigEntry("ServerConnection", "Host", "", "The host address of your MySQL database.");
Port = InitConfigEntry("ServerConnection", "Port", 3306, "The port of your database server.");
UserName = InitConfigEntry("ServerConnection", "Username", "", "The login username for your database.");
Password = InitConfigEntry("ServerConnection", "Password", "", "The login password for your database.");
Parameters = InitConfigEntry("ServerConnection", "AdditionalParameters", "", "Some variations of MySQL require additional parameters on the connection string; such as \"CharSet=utf8mb4;Convert Zero Datetime=True;Allow Zero Datetime=True;\" put those here if needed.");
if (!string.IsNullOrEmpty(DatabaseName.Value) && !string.IsNullOrEmpty(Host.Value) && Port.Value != 0 && !string.IsNullOrEmpty(UserName.Value) && !string.IsNullOrEmpty(Password.Value))
{
MySQLConfigured = true;
}
}
private static ConfigEntry<T> InitConfigEntry<T>(string section, string key, T defaultValue, string description)
{
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
ConfigEntry<T> val = ((BasePlugin)Plugin.Instance).Config.Bind<T>(section, key, defaultValue, description);
string text = Path.Combine(Paths.ConfigPath, "CrimsonSQL.cfg");
ConfigEntry<T> val2 = default(ConfigEntry<T>);
if (File.Exists(text) && new ConfigFile(text, true).TryGetEntry<T>(section, key, ref val2))
{
val.Value = val2.Value;
}
return val;
}
}
}
namespace CrimsonSQL.Services
{
public class SQLService : ISQLService
{
private static string connectionString;
private static bool reportConnection = true;
public SQLService()
{
connectionString = $"Server={Settings.Host.Value};Database={Settings.DatabaseName.Value};User ID={Settings.UserName.Value};Password={Settings.Password.Value};{Settings.Parameters.Value}";
Connect();
}
public bool Connect()
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Expected O, but got Unknown
//IL_0045: Expected O, but got Unknown
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
try
{
MySqlConnection val = new MySqlConnection(connectionString);
try
{
((DbConnection)(object)val).Open();
if (reportConnection)
{
reportConnection = false;
Plugin.LogInstance.LogInfo((object)"Connected to MySQL database.");
Settings.MySQLConfigured = true;
}
return true;
}
finally
{
((IDisposable)val)?.Dispose();
}
}
catch (MySqlException val2)
{
MySqlException val3 = val2;
Settings.MySQLConfigured = false;
Plugin.LogInstance.LogError((object)("Failed to connect to MySQL database. \nError Info:" + $"\nError Code: {val3.ErrorCode} " + $"\nNumber: {val3.Number} " + "\nMessage: " + ((Exception)(object)val3).Message + "\nInner: " + ((Exception)(object)val3).InnerException?.Message));
reportConnection = true;
return false;
}
}
public void CreateTable(string tableName, Dictionary<string, string> columns)
{
if (!Settings.MySQLConfigured)
{
Plugin.LogInstance.LogError((object)"Attempted to use CrimsonSQL with a misconfigured SQL.");
return;
}
string value = string.Join(", ", columns.Select((KeyValuePair<string, string> kvp) => kvp.Key + " " + kvp.Value));
string query = $"CREATE TABLE IF NOT EXISTS {tableName} ({value});";
ExecuteNonQuery(query);
}
public int Insert(string tableName, Dictionary<string, object> values, List<int> handledExceptions = null)
{
//IL_013c: Expected O, but got Unknown
//IL_0180: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Expected O, but got Unknown
//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Expected O, but got Unknown
if (!Settings.MySQLConfigured)
{
Plugin.LogInstance.LogError((object)"Attempted to use CrimsonSQL with a misconfigured SQL.");
return -1;
}
string value = string.Join(", ", values.Keys);
string value2 = string.Join(", ", values.Keys.Select((string k) => "@" + k));
string text = $"INSERT INTO {tableName} ({value}) VALUES ({value2}); SELECT LAST_INSERT_ID();";
MySqlConnection val = new MySqlConnection(connectionString);
try
{
MySqlCommand val2 = new MySqlCommand(text, val);
try
{
if (values != null)
{
foreach (KeyValuePair<string, object> value3 in values)
{
val2.Parameters.AddWithValue("@" + value3.Key, value3.Value);
}
}
try
{
((DbConnection)(object)val).Open();
return Convert.ToInt32(((DbCommand)(object)val2).ExecuteScalar());
}
catch (MySqlException val3)
{
MySqlException val4 = val3;
if (handledExceptions == null || !handledExceptions.Contains(val4.Number))
{
Plugin.LogInstance.LogError((object)("MySQL Exception occurred: " + $"\nError Code: {val4.ErrorCode} " + $"\nNumber: {val4.Number} " + "\nMessage: " + ((Exception)(object)val4).Message + "\nInner: " + ((Exception)(object)val4).InnerException?.Message));
}
return -val4.Number;
}
}
finally
{
((IDisposable)val2)?.Dispose();
}
}
finally
{
((IDisposable)val)?.Dispose();
}
}
public void Delete(string tableName, Dictionary<string, object> whereConditions)
{
if (!Settings.MySQLConfigured)
{
Plugin.LogInstance.LogError((object)"Attempted to use CrimsonSQL with a misconfigured SQL.");
return;
}
string text = string.Join(" AND ", whereConditions.Keys.Select((string k) => k + " = @" + k));
string query = "DELETE FROM " + tableName + " WHERE " + text;
ExecuteNonQuery(query, whereConditions);
}
public DataTable Select(string tableName, string[] columns = null, Dictionary<string, object> whereConditions = null)
{
if (!Settings.MySQLConfigured)
{
Plugin.LogInstance.LogError((object)"Attempted to use CrimsonSQL with a misconfigured SQL.");
return null;
}
string text = ((columns != null && columns.Any()) ? string.Join(", ", columns) : "*");
string text2 = "SELECT " + text + " FROM " + tableName;
if (whereConditions != null && whereConditions.Any())
{
string text3 = string.Join(" AND ", whereConditions.Keys.Select((string k) => k + " = @" + k));
text2 = text2 + " WHERE " + text3;
}
return ExecuteQuery(text2, whereConditions);
}
public int Replace(string tableName, Dictionary<string, object> whereConditions, Dictionary<string, object> newValues)
{
//IL_0208: Expected O, but got Unknown
//IL_023d: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Expected O, but got Unknown
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Expected O, but got Unknown
//IL_0189: Unknown result type (might be due to invalid IL or missing references)
//IL_0190: Expected O, but got Unknown
if (!Settings.MySQLConfigured)
{
Plugin.LogInstance.LogError((object)"Attempted to use CrimsonSQL with a misconfigured SQL.");
return -1;
}
MySqlConnection val = new MySqlConnection(connectionString);
try
{
((DbConnection)(object)val).Open();
MySqlTransaction val2 = val.BeginTransaction();
try
{
string text = string.Join(" AND ", whereConditions.Keys.Select((string k) => k + " = @" + k));
MySqlCommand val3 = new MySqlCommand("DELETE FROM " + tableName + " WHERE " + text, val, val2);
try
{
foreach (KeyValuePair<string, object> whereCondition in whereConditions)
{
val3.Parameters.AddWithValue("@" + whereCondition.Key, whereCondition.Value);
}
((DbCommand)(object)val3).ExecuteNonQuery();
}
finally
{
((IDisposable)val3)?.Dispose();
}
string value = string.Join(", ", newValues.Keys);
string value2 = string.Join(", ", newValues.Keys.Select((string k) => "@" + k));
MySqlCommand val4 = new MySqlCommand($"INSERT INTO {tableName} ({value}) VALUES ({value2}); SELECT LAST_INSERT_ID();", val, val2);
try
{
foreach (KeyValuePair<string, object> newValue in newValues)
{
val4.Parameters.AddWithValue("@" + newValue.Key, newValue.Value);
}
int result = Convert.ToInt32(((DbCommand)(object)val4).ExecuteScalar());
((DbTransaction)(object)val2).Commit();
return result;
}
finally
{
((IDisposable)val4)?.Dispose();
}
}
catch (MySqlException val5)
{
MySqlException val6 = val5;
((DbTransaction)(object)val2).Rollback();
Plugin.LogInstance.LogError((object)("MySQL Exception occurred during Replace: " + $"\nError Code: {val6.ErrorCode} " + $"\nNumber: {val6.Number} " + "\nMessage: " + ((Exception)(object)val6).Message + "\nInner: " + ((Exception)(object)val6).InnerException?.Message));
return -val6.Number;
}
finally
{
((IDisposable)val2)?.Dispose();
}
}
finally
{
((IDisposable)val)?.Dispose();
}
}
public DataTable ExecuteQuery(string query, Dictionary<string, object> parameters = null)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Expected O, but got Unknown
if (!Settings.MySQLConfigured)
{
Plugin.LogInstance.LogError((object)"Attempted to use CrimsonSQL with a misconfigured SQL.");
}
MySqlConnection val = new MySqlConnection(connectionString);
try
{
MySqlCommand val2 = new MySqlCommand(query, val);
try
{
if (parameters != null)
{
foreach (KeyValuePair<string, object> parameter in parameters)
{
val2.Parameters.AddWithValue("@" + parameter.Key, parameter.Value);
}
}
((DbConnection)(object)val).Open();
MySqlDataReader val3 = val2.ExecuteReader();
try
{
DataTable dataTable = new DataTable();
dataTable.Load((IDataReader)val3);
return dataTable;
}
finally
{
((IDisposable)val3)?.Dispose();
}
}
finally
{
((IDisposable)val2)?.Dispose();
}
}
finally
{
((IDisposable)val)?.Dispose();
}
}
public void ExecuteNonQuery(string query, Dictionary<string, object> parameters = null)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Expected O, but got Unknown
if (!Settings.MySQLConfigured)
{
Plugin.LogInstance.LogError((object)"Attempted to use CrimsonSQL with a misconfigured SQL.");
}
MySqlConnection val = new MySqlConnection(connectionString);
try
{
MySqlCommand val2 = new MySqlCommand(query, val);
try
{
if (parameters != null)
{
foreach (KeyValuePair<string, object> parameter in parameters)
{
val2.Parameters.AddWithValue("@" + parameter.Key, parameter.Value);
}
}
((DbConnection)(object)val).Open();
((DbCommand)(object)val2).ExecuteNonQuery();
}
finally
{
((IDisposable)val2)?.Dispose();
}
}
finally
{
((IDisposable)val)?.Dispose();
}
}
}
}
namespace CrimsonSQL.API
{
public interface ISQLService
{
bool Connect();
void ExecuteNonQuery(string query, Dictionary<string, object> parameters = null);
DataTable ExecuteQuery(string query, Dictionary<string, object> parameters = null);
void CreateTable(string tableName, Dictionary<string, string> columns);
int Insert(string tableName, Dictionary<string, object> values, List<int> handledExceptions = null);
void Delete(string tableName, Dictionary<string, object> whereConditions);
DataTable Select(string tableName, string[] columns = null, Dictionary<string, object> whereConditions = null);
int Replace(string tableName, Dictionary<string, object> whereConditions, Dictionary<string, object> newValues);
}
}
namespace Costura
{
[CompilerGenerated]
internal static class AssemblyLoader
{
private static object nullCacheLock = new object();
private static Dictionary<string, bool> nullCache = new Dictionary<string, bool>();
private static Dictionary<string, string> assemblyNames = new Dictionary<string, string>();
private static Dictionary<string, string> symbolNames = new Dictionary<string, string>();
private static int isAttached;
private static string CultureToString(CultureInfo culture)
{
if (culture == null)
{
return "";
}
return culture.Name;
}
private static Assembly ReadExistingAssembly(AssemblyName name)
{
AppDomain currentDomain = AppDomain.CurrentDomain;
Assembly[] assemblies = currentDomain.GetAssemblies();
Assembly[] array = assemblies;
foreach (Assembly assembly in array)
{
AssemblyName name2 = assembly.GetName();
if (string.Equals(name2.Name, name.Name, StringComparison.InvariantCultureIgnoreCase) && string.Equals(CultureToString(name2.CultureInfo), CultureToString(name.CultureInfo), StringComparison.InvariantCultureIgnoreCase))
{
return assembly;
}
}
return null;
}
private static void CopyTo(Stream source, Stream destination)
{
byte[] array = new byte[81920];
int count;
while ((count = source.Read(array, 0, array.Length)) != 0)
{
destination.Write(array, 0, count);
}
}
private static Stream LoadStream(string fullName)
{
Assembly executingAssembly = Assembly.GetExecutingAssembly();
if (fullName.EndsWith(".compressed"))
{
using (Stream stream = executingAssembly.GetManifestResourceStream(fullName))
{
using DeflateStream source = new DeflateStream(stream, CompressionMode.Decompress);
MemoryStream memoryStream = new MemoryStream();
CopyTo(source, memoryStream);
memoryStream.Position = 0L;
return memoryStream;
}
}
return executingAssembly.GetManifestResourceStream(fullName);
}
private static Stream LoadStream(Dictionary<string, string> resourceNames, string name)
{
if (resourceNames.TryGetValue(name, out var value))
{
return LoadStream(value);
}
return null;
}
private static byte[] ReadStream(Stream stream)
{
byte[] array = new byte[stream.Length];
stream.Read(array, 0, array.Length);
return array;
}
private static Assembly ReadFromEmbeddedResources(Dictionary<string, string> assemblyNames, Dictionary<string, string> symbolNames, AssemblyName requestedAssemblyName)
{
string text = requestedAssemblyName.Name.ToLowerInvariant();
if (requestedAssemblyName.CultureInfo != null && !string.IsNullOrEmpty(requestedAssemblyName.CultureInfo.Name))
{
text = requestedAssemblyName.CultureInfo.Name + "." + text;
}
byte[] rawAssembly;
using (Stream stream = LoadStream(assemblyNames, text))
{
if (stream == null)
{
return null;
}
rawAssembly = ReadStream(stream);
}
using (Stream stream2 = LoadStream(symbolNames, text))
{
if (stream2 != null)
{
byte[] rawSymbolStore = ReadStream(stream2);
return Assembly.Load(rawAssembly, rawSymbolStore);
}
}
return Assembly.Load(rawAssembly);
}
public static Assembly ResolveAssembly(object sender, ResolveEventArgs e)
{
lock (nullCacheLock)
{
if (nullCache.ContainsKey(e.Name))
{
return null;
}
}
AssemblyName assemblyName = new AssemblyName(e.Name);
Assembly assembly = ReadExistingAssembly(assemblyName);
if ((object)assembly != null)
{
return assembly;
}
assembly = ReadFromEmbeddedResources(assemblyNames, symbolNames, assemblyName);
if ((object)assembly == null)
{
lock (nullCacheLock)
{
nullCache[e.Name] = true;
}
if ((assemblyName.Flags & AssemblyNameFlags.Retargetable) != 0)
{
assembly = Assembly.Load(assemblyName);
}
}
return assembly;
}
public static void Attach()
{
if (Interlocked.Exchange(ref isAttached, 1) == 1)
{
return;
}
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += delegate(object sender, ResolveEventArgs e)
{
lock (nullCacheLock)
{
if (nullCache.ContainsKey(e.Name))
{
return null;
}
}
AssemblyName assemblyName = new AssemblyName(e.Name);
Assembly assembly = ReadExistingAssembly(assemblyName);
if ((object)assembly != null)
{
return assembly;
}
assembly = ReadFromEmbeddedResources(assemblyNames, symbolNames, assemblyName);
if ((object)assembly == null)
{
lock (nullCacheLock)
{
nullCache[e.Name] = true;
}
if ((assemblyName.Flags & AssemblyNameFlags.Retargetable) != 0)
{
assembly = Assembly.Load(assemblyName);
}
}
return assembly;
};
}
}
}
internal class CrimsonSQL_ProcessedByFody
{
internal const string FodyVersion = "6.9.1.0";
internal const string Costura = "5.7.0";
}