提交 91ca5879 编写于 作者: J Jared Parsons

Merge pull request #11423 from jkotas/alc

[WIP] Stop overriding default assembly load context
......@@ -23,7 +23,7 @@ internal CoreClrCompilerServerHost(string clientDirectory)
: base(clientDirectory: clientDirectory, sdkDirectory: null)
{
AssemblyReferenceProvider = (path, properties) => new CachingMetadataReference(path, properties);
AnalyzerAssemblyLoader = CoreClrAnalyzerAssemblyLoader.CreateAndSetDefault();
AnalyzerAssemblyLoader = new CoreClrAnalyzerAssemblyLoader();
}
public override bool CheckAnalyzers(string baseDirectory, ImmutableArray<CommandLineAnalyzerReference> analyzers)
......
......@@ -14,24 +14,17 @@
namespace Microsoft.CodeAnalysis
{
/// Core CLR compatible wrapper for loading analyzers.
internal sealed class CoreClrAnalyzerAssemblyLoader : AssemblyLoadContext, IAnalyzerAssemblyLoader
internal sealed class CoreClrAnalyzerAssemblyLoader : IAnalyzerAssemblyLoader
{
private readonly Dictionary<string, Assembly> _pathsToAssemblies = new Dictionary<string, Assembly>(StringComparer.OrdinalIgnoreCase);
private readonly Dictionary<string, Assembly> _namesToAssemblies = new Dictionary<string, Assembly>();
private readonly List<string> _dependencyPaths = new List<string>();
private readonly object _guard = new object();
private readonly AssemblyLoadContext _loadContext = AssemblyLoadContext.GetLoadContext(typeof(CoreClrAnalyzerAssemblyLoader).GetTypeInfo().Assembly);
/// <summary>
/// Creates a new instance of <see cref="CoreClrAnalyzerAssemblyLoader" />,
/// sets that instance to be the default <see cref="AssemblyLoadContext" />,
/// and returns that instance. Throws if the Default is already set or the
/// binding model is already locked.
/// </summary>
public static CoreClrAnalyzerAssemblyLoader CreateAndSetDefault()
public CoreClrAnalyzerAssemblyLoader()
{
var assemblyLoader = new CoreClrAnalyzerAssemblyLoader();
InitializeDefaultContext(assemblyLoader);
return assemblyLoader;
_loadContext.Resolving += this.Load;
}
public void AddDependencyLocation(string fullPath)
......@@ -92,7 +85,7 @@ private Assembly AppContextLoad(AssemblyName assemblyName)
return null;
}
protected override Assembly Load(AssemblyName assemblyName)
private Assembly Load(AssemblyLoadContext loadContext, AssemblyName assemblyName)
{
lock (_guard)
{
......@@ -141,7 +134,7 @@ protected override Assembly Load(AssemblyName assemblyName)
/// </remarks>
private Assembly LoadAndCache(string fullPath)
{
var assembly = LoadFromAssemblyPath(fullPath);
var assembly = _loadContext.LoadFromAssemblyPath(fullPath);
var name = assembly.FullName;
_pathsToAssemblies[fullPath] = assembly;
......
......@@ -38,7 +38,7 @@ internal static int Run(IEnumerable<string> arguments, RequestLanguage language,
protected override int RunLocalCompilation(string[] arguments, BuildPaths buildPaths, TextWriter textWriter)
{
return _compileFunc(arguments, buildPaths, textWriter, CoreClrAnalyzerAssemblyLoader.CreateAndSetDefault());
return _compileFunc(arguments, buildPaths, textWriter, new CoreClrAnalyzerAssemblyLoader());
}
protected override string GetSessionKey(BuildPaths buildPaths)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册