internal static void SetupAssemblyFilenames(bool force = false) { if (FilenameLocations == null || force) { FilenameLocations = new Dictionary <string, string>(); foreach (var fn in TraverseTree(LibraryPath, s => s != NativeLibraryPath)) { if (FilenameLocations.ContainsKey(fn.Name)) { Log(Logger.Level.Critical, $"Multiple instances of {fn.Name} exist in Libs! Ignoring {fn.FullName}"); } else { FilenameLocations.Add(fn.Name, fn.FullName); } } if (!SetDefaultDllDirectories(LoadLibraryFlags.LOAD_LIBRARY_SEARCH_USER_DIRS | LoadLibraryFlags.LOAD_LIBRARY_SEARCH_SYSTEM32 | LoadLibraryFlags.LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | LoadLibraryFlags.LOAD_LIBRARY_SEARCH_APPLICATION_DIR)) { var err = new Win32Exception(); Log(Logger.Level.Critical, $"Error configuring DLL search path"); Log(Logger.Level.Critical, err); return; } void AddDir(string path) { var retPtr = AddDllDirectory(path); if (retPtr == IntPtr.Zero) { var err = new Win32Exception(); Log(Logger.Level.Warning, $"Could not add DLL directory"); Log(Logger.Level.Warning, err); } } if (Directory.Exists(NativeLibraryPath)) { AddDir(NativeLibraryPath); TraverseTree(NativeLibraryPath, dir => { // this is a terrible hack for iterating directories AddDir(dir); return(true); }).All(f => true); // force it to iterate all } var unityData = Directory.EnumerateDirectories(Environment.CurrentDirectory, "*_Data").First(); AddDir(Path.Combine(unityData, "Plugins")); foreach (var dir in Environment.GetEnvironmentVariable("path").Split(Path.PathSeparator)) { AddDir(dir); } } }
internal static string ResolveDataPath(string installDir) => Directory.EnumerateDirectories(installDir, "*_Data").First();