Skip to content

Commit

Permalink
fix EvilBeaver#1014,EvilBeaver#487: работа внешних компонент после ко…
Browse files Browse the repository at this point in the history
…мпиляции в EXE при подключении из файла или макета
  • Loading branch information
Mr-Rm committed Mar 17, 2021
1 parent 1cc24e6 commit f9e66ee
Showing 1 changed file with 17 additions and 5 deletions.
22 changes: 17 additions & 5 deletions src/StandaloneRunner/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ namespace StandaloneRunner
{
internal static class Program
{
private static Dictionary<string, Assembly> _loadedAssemblies = new Dictionary<string, Assembly>();

private static int Main(string[] args)
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
Expand Down Expand Up @@ -59,23 +61,33 @@ private static int LoadAndRun(FileStream sourceStream, string[] args)
{
CommandLineArguments = args
};

return process.LoadAndRun(codeStream);
}

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
var resourceName = "StandaloneRunner." + new AssemblyName(args.Name).Name + ".dll";
var assemblyShortName = new AssemblyName(args.Name).Name;
var resourceName = "StandaloneRunner." + assemblyShortName + ".dll";
Assembly assembly;

if (_loadedAssemblies.TryGetValue(assemblyShortName, out assembly))
{
return assembly;
}

using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
var asmData = new byte[stream.Length];
stream.Read(asmData, 0, asmData.Length);
return Assembly.Load(asmData);
assembly = Assembly.Load(asmData);

_loadedAssemblies.Add(assemblyShortName, assembly);
return assembly;
}
}

private static Stream LocateCode(Stream sourceStream)
{
const int SIGN_SIZE = 8;
Expand Down

0 comments on commit f9e66ee

Please sign in to comment.