diff --git a/src/Microsoft.DotNet.ProjectModel/DependencyContextBuilder.cs b/src/Microsoft.DotNet.ProjectModel/DependencyContextBuilder.cs index 653b33e0a..217c840bb 100644 --- a/src/Microsoft.DotNet.ProjectModel/DependencyContextBuilder.cs +++ b/src/Microsoft.DotNet.ProjectModel/DependencyContextBuilder.cs @@ -85,6 +85,8 @@ namespace Microsoft.Extensions.DependencyModel .EmitEntryPoint .GetValueOrDefault(false); + isExe &= target.IsDesktop(); + assemblies = new[] { export.Library.Identity.Name + (isExe ? ".exe": ".dll") }; } else diff --git a/src/Microsoft.DotNet.Tools.Compiler/Program.cs b/src/Microsoft.DotNet.Tools.Compiler/Program.cs index 5c40a4a54..42a56a51f 100644 --- a/src/Microsoft.DotNet.Tools.Compiler/Program.cs +++ b/src/Microsoft.DotNet.Tools.Compiler/Program.cs @@ -250,13 +250,10 @@ namespace Microsoft.DotNet.Tools.Compiler 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) { var dependencyContext = DependencyContextBuilder.Build(compilationOptions, - libraryExporter, + exporter, args.ConfigValue, context.TargetFramework, context.RuntimeIdentifier); diff --git a/src/Microsoft.Extensions.DependencyModel/CompilationLibrary.cs b/src/Microsoft.Extensions.DependencyModel/CompilationLibrary.cs index dcba6361f..ea754d876 100644 --- a/src/Microsoft.Extensions.DependencyModel/CompilationLibrary.cs +++ b/src/Microsoft.Extensions.DependencyModel/CompilationLibrary.cs @@ -10,7 +10,7 @@ namespace Microsoft.Extensions.DependencyModel { public class CompilationLibrary : Library { - private static Lazy _refsLocation = new Lazy(GetRefsLocation); + private static Lazy _entryAssembly = new Lazy(GetEntryAssembly); public CompilationLibrary(string libraryType, string packageName, string version, string hash, string[] assemblies, Dependency[] dependencies, bool serviceable) : base(libraryType, packageName, version, hash, dependencies, serviceable) @@ -22,10 +22,18 @@ namespace Microsoft.Extensions.DependencyModel public IEnumerable ResolveReferencePaths() { - var basePath = _refsLocation.Value; + var entryAssembly = _entryAssembly.Value; + var entryAssemblyName = entryAssembly.GetName().Name; + var basePath = GetRefsLocation(); foreach (var assembly in Assemblies) { + if (Path.GetFileNameWithoutExtension(assembly) == entryAssemblyName) + { + yield return entryAssembly.Location; + continue; + } + var fullName = Path.Combine(basePath, Path.GetFileName(assembly)); if (!File.Exists(fullName)) { @@ -34,16 +42,19 @@ namespace Microsoft.Extensions.DependencyModel yield return fullName; } } - - private static string GetRefsLocation() + private static Assembly GetEntryAssembly() { var entryAssembly = (Assembly)typeof(Assembly).GetTypeInfo().GetDeclaredMethod("GetEntryAssembly").Invoke(null, null); if (entryAssembly == null) { 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"); } } } \ No newline at end of file