Fix mod assembly loading on Windows.

This commit is contained in:
Paul Chote
2016-02-07 18:14:06 +00:00
parent e0d74455f5
commit 6c6826c3f3
6 changed files with 55 additions and 39 deletions

View File

@@ -21,8 +21,6 @@ namespace OpenRA.FileSystem
{
public IEnumerable<IReadOnlyPackage> MountedPackages { get { return mountedPackages.Keys; } }
readonly Dictionary<IReadOnlyPackage, int> mountedPackages = new Dictionary<IReadOnlyPackage, int>();
static readonly Dictionary<string, Assembly> AssemblyCache = new Dictionary<string, Assembly>();
Cache<string, List<IReadOnlyPackage>> fileIndex = new Cache<string, List<IReadOnlyPackage>>(_ => new List<IReadOnlyPackage>());
public IReadWritePackage CreatePackage(string filename, Dictionary<string, byte[]> content)
@@ -217,30 +215,5 @@ namespace OpenRA.FileSystem
else
return mountedPackages.Keys.Any(f => f.Contains(name));
}
public static Assembly ResolveAssembly(object sender, ResolveEventArgs e)
{
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
if (assembly.FullName == e.Name)
return assembly;
var frags = e.Name.Split(',');
var filename = frags[0] + ".dll";
Assembly a;
if (AssemblyCache.TryGetValue(filename, out a))
return a;
if (Game.ModData.ModFiles.Exists(filename))
using (var s = Game.ModData.ModFiles.Open(filename))
{
var buf = s.ReadBytes((int)s.Length);
a = Assembly.Load(buf);
AssemblyCache.Add(filename, a);
return a;
}
return null;
}
}
}