Fix dependency context bugs

This commit is contained in:
Pavel Krymets 2016-01-08 09:02:04 -08:00
parent 592fef980c
commit 2d4fe4bc10
3 changed files with 19 additions and 9 deletions

View file

@ -85,6 +85,8 @@ namespace Microsoft.Extensions.DependencyModel
.EmitEntryPoint .EmitEntryPoint
.GetValueOrDefault(false); .GetValueOrDefault(false);
isExe &= target.IsDesktop();
assemblies = new[] { export.Library.Identity.Name + (isExe ? ".exe": ".dll") }; assemblies = new[] { export.Library.Identity.Name + (isExe ? ".exe": ".dll") };
} }
else else

View file

@ -250,13 +250,10 @@ namespace Microsoft.DotNet.Tools.Compiler
compilerArgs.AddRange(references.Select(r => $"--reference:{r}")); compilerArgs.AddRange(references.Select(r => $"--reference:{r}"));
var runtimeContext = ProjectContext.Create(context.ProjectDirectory, context.TargetFramework, new[] { RuntimeIdentifier.Current });
var libraryExporter = runtimeContext.CreateExporter(args.ConfigValue);
if (compilationOptions.PreserveCompilationContext == true) if (compilationOptions.PreserveCompilationContext == true)
{ {
var dependencyContext = DependencyContextBuilder.Build(compilationOptions, var dependencyContext = DependencyContextBuilder.Build(compilationOptions,
libraryExporter, exporter,
args.ConfigValue, args.ConfigValue,
context.TargetFramework, context.TargetFramework,
context.RuntimeIdentifier); context.RuntimeIdentifier);

View file

@ -10,7 +10,7 @@ namespace Microsoft.Extensions.DependencyModel
{ {
public class CompilationLibrary : Library public class CompilationLibrary : Library
{ {
private static Lazy<string> _refsLocation = new Lazy<string>(GetRefsLocation); private static Lazy<Assembly> _entryAssembly = new Lazy<Assembly>(GetEntryAssembly);
public CompilationLibrary(string libraryType, string packageName, string version, string hash, string[] assemblies, Dependency[] dependencies, bool serviceable) public CompilationLibrary(string libraryType, string packageName, string version, string hash, string[] assemblies, Dependency[] dependencies, bool serviceable)
: base(libraryType, packageName, version, hash, dependencies, serviceable) : base(libraryType, packageName, version, hash, dependencies, serviceable)
@ -22,10 +22,18 @@ namespace Microsoft.Extensions.DependencyModel
public IEnumerable<string> ResolveReferencePaths() public IEnumerable<string> ResolveReferencePaths()
{ {
var basePath = _refsLocation.Value; var entryAssembly = _entryAssembly.Value;
var entryAssemblyName = entryAssembly.GetName().Name;
var basePath = GetRefsLocation();
foreach (var assembly in Assemblies) foreach (var assembly in Assemblies)
{ {
if (Path.GetFileNameWithoutExtension(assembly) == entryAssemblyName)
{
yield return entryAssembly.Location;
continue;
}
var fullName = Path.Combine(basePath, Path.GetFileName(assembly)); var fullName = Path.Combine(basePath, Path.GetFileName(assembly));
if (!File.Exists(fullName)) if (!File.Exists(fullName))
{ {
@ -34,16 +42,19 @@ namespace Microsoft.Extensions.DependencyModel
yield return fullName; yield return fullName;
} }
} }
private static Assembly GetEntryAssembly()
private static string GetRefsLocation()
{ {
var entryAssembly = (Assembly)typeof(Assembly).GetTypeInfo().GetDeclaredMethod("GetEntryAssembly").Invoke(null, null); var entryAssembly = (Assembly)typeof(Assembly).GetTypeInfo().GetDeclaredMethod("GetEntryAssembly").Invoke(null, null);
if (entryAssembly == null) if (entryAssembly == null)
{ {
throw new InvalidOperationException("Could not determine entry assembly"); throw new InvalidOperationException("Could not determine entry assembly");
} }
return entryAssembly;
}
return Path.Combine(Path.GetDirectoryName(entryAssembly.Location), "refs"); private static string GetRefsLocation()
{
return Path.Combine(Path.GetDirectoryName(_entryAssembly.Value.Location), "refs");
} }
} }
} }