using System.Reflection;
using System.Runtime.Loader;
using Impostor.Api.Plugins;
+using Impostor.Server.Utils;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileSystemGlobbing;
using Microsoft.Extensions.Hosting;
var pluginPaths = new List<string>(config.Paths);
var libraryPaths = new List<string>(config.LibraryPaths);
- var rootFolder = AppContext.BaseDirectory;
+ var rootFolder = DirUtils.GetExecutableDirectory();
pluginPaths.Add(Path.Combine(rootFolder, "plugins"));
libraryPaths.Add(Path.Combine(rootFolder, "libraries"));
}
}
}
-}
\ No newline at end of file
+}
using Impostor.Server.Net.Redirector;
using Impostor.Server.Plugins;
using Impostor.Server.Recorder;
+using Impostor.Server.Utils;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
.Get<PluginConfig>() ?? new PluginConfig();
return Host.CreateDefaultBuilder(args)
+ .UseContentRoot(DirUtils.GetExecutableDirectory())
#if DEBUG
.UseEnvironment(Environment.GetEnvironmentVariable("IMPOSTOR_ENV") ?? "Development")
#else
--- /dev/null
+using System;
+using System.Diagnostics;
+using System.IO;
+
+namespace Impostor.Server.Utils
+{
+ internal static class DirUtils
+ {
+ // Workaround for:
+ // - https://github.com/dotnet/runtime/issues/40828
+ // - https://github.com/dotnet/runtime/issues/38405#issuecomment-652643506
+ public static string GetExecutableDirectory()
+ {
+ var programDirectory = Path.GetDirectoryName(typeof(Program).Assembly.Location)!;
+ var currentDirectory = Directory.GetCurrentDirectory();
+ var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
+ var executablePath = Process.GetCurrentProcess().MainModule!.FileName;
+ var executableDirectory = Path.GetDirectoryName(executablePath)!;
+ var executable = Path.GetFileNameWithoutExtension(executablePath);
+
+ if ("dotnet".Equals(executable, StringComparison.InvariantCultureIgnoreCase))
+ {
+ return programDirectory;
+ }
+
+ return executableDirectory;
+ }
+ }
+}