Skip to content
This repository was archived by the owner on Aug 24, 2022. It is now read-only.
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 37 additions & 2 deletions JSIL/CILSupport.cs
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,9 @@ public class AssemblyResolver : BaseAssemblyResolver, IDisposable {
25, 52, 224, 137
};

private readonly object _syncRoot = new object();
private readonly List<string> _directories = new List<string>();

protected readonly Configuration Configuration;
protected readonly AssemblyCache Cache;
protected readonly bool OwnsCache;
Expand All @@ -101,6 +104,34 @@ public void Dispose () {
Cache.Dispose();
}

public new void AddSearchDirectory(string directory)
{
lock (_syncRoot)
{
if (_directories.Contains(directory))
return;
_directories.Add(directory);
base.AddSearchDirectory(directory);
}
}

public new void RemoveSearchDirectory(string directory)
{
lock (_syncRoot)
{
_directories.Remove(directory);
base.RemoveSearchDirectory(directory);
}
}

public new string[] GetSearchDirectories()
{
lock (_syncRoot)
{
return base.GetSearchDirectories();
}
}

public AssemblyNameReference FilterPortableClassLibraryReferences (AssemblyNameReference name) {
// Portable class libraries are pretty shoddily constructed. Who came up with this nonsense?

Expand Down Expand Up @@ -141,8 +172,12 @@ public override AssemblyDefinition Resolve (AssemblyNameReference name, ReaderPa
string redirectedFrom;
actualName = FilterRedirectedReferences(name, out redirectedFrom);

var result = Cache.GetOrCreate(actualName.FullName, (fullName) => {
var assembly = base.Resolve(actualName, parameters);
var result = Cache.GetOrCreate(actualName.FullName, (fullName) =>
{
AssemblyDefinition assembly;
lock (_syncRoot)
assembly = base.Resolve(actualName, parameters);

if (redirectedFrom != null)
Console.Error.WriteLine("// Redirected '{0}' to '{1}'", redirectedFrom, actualName.FullName);

Expand Down