Ignore framework assemblies when compiling for package based frameworks.

Fixes #1054
This commit is contained in:
Pranav K 2016-01-26 17:36:42 -08:00
parent 9e8f101ae3
commit ec73b1de23

View file

@ -38,7 +38,7 @@ namespace Microsoft.DotNet.ProjectModel.Resolution
!containsAssembly; !containsAssembly;
var dependencies = new List<LibraryRange>(targetLibrary.Dependencies.Count + targetLibrary.FrameworkAssemblies.Count); var dependencies = new List<LibraryRange>(targetLibrary.Dependencies.Count + targetLibrary.FrameworkAssemblies.Count);
PopulateDependencies(dependencies, targetLibrary); PopulateDependencies(dependencies, targetLibrary, targetFramework);
var path = _packagePathResolver.GetInstallPath(package.Name, package.Version); var path = _packagePathResolver.GetInstallPath(package.Name, package.Version);
@ -63,7 +63,7 @@ namespace Microsoft.DotNet.ProjectModel.Resolution
private void PopulateLegacyPortableDependencies(NuGetFramework targetFramework, List<LibraryRange> dependencies, string packagePath, LockFileTargetLibrary targetLibrary) private void PopulateLegacyPortableDependencies(NuGetFramework targetFramework, List<LibraryRange> dependencies, string packagePath, LockFileTargetLibrary targetLibrary)
{ {
var seen = new HashSet<string>(); var seen = new HashSet<string>();
foreach (var assembly in targetLibrary.CompileTimeAssemblies) foreach (var assembly in targetLibrary.CompileTimeAssemblies)
{ {
// (ref/lib)/{tfm}/{assembly} // (ref/lib)/{tfm}/{assembly}
@ -75,34 +75,34 @@ namespace Microsoft.DotNet.ProjectModel.Resolution
} }
var assemblyTargetFramework = NuGetFramework.Parse(pathParts[1]); var assemblyTargetFramework = NuGetFramework.Parse(pathParts[1]);
if (!assemblyTargetFramework.IsPCL) if (!assemblyTargetFramework.IsPCL)
{ {
continue; continue;
} }
var assemblyPath = Path.Combine(packagePath, assembly.Path); var assemblyPath = Path.Combine(packagePath, assembly.Path);
foreach (var dependency in GetDependencies(assemblyPath)) foreach (var dependency in GetDependencies(assemblyPath))
{ {
if (seen.Add(dependency)) if (seen.Add(dependency))
{ {
string path; string path;
Version version; Version version;
// If there exists a reference assembly on the requested framework with the same name then turn this into a // If there exists a reference assembly on the requested framework with the same name then turn this into a
// framework assembly dependency // framework assembly dependency
if (_frameworkReferenceResolver.TryGetAssembly(dependency, targetFramework, out path, out version)) if (_frameworkReferenceResolver.TryGetAssembly(dependency, targetFramework, out path, out version))
{ {
dependencies.Add(new LibraryRange(dependency, dependencies.Add(new LibraryRange(dependency,
LibraryType.ReferenceAssembly, LibraryType.ReferenceAssembly,
LibraryDependencyType.Build)); LibraryDependencyType.Build));
} }
} }
} }
} }
} }
private static IEnumerable<string> GetDependencies(string path) private static IEnumerable<string> GetDependencies(string path)
{ {
using (var peReader = new PEReader(File.OpenRead(path))) using (var peReader = new PEReader(File.OpenRead(path)))
@ -118,7 +118,10 @@ namespace Microsoft.DotNet.ProjectModel.Resolution
} }
} }
private void PopulateDependencies(List<LibraryRange> dependencies, LockFileTargetLibrary targetLibrary) private void PopulateDependencies(
List<LibraryRange> dependencies,
LockFileTargetLibrary targetLibrary,
NuGetFramework targetFramework)
{ {
foreach (var dependency in targetLibrary.Dependencies) foreach (var dependency in targetLibrary.Dependencies)
{ {
@ -129,12 +132,16 @@ namespace Microsoft.DotNet.ProjectModel.Resolution
LibraryDependencyType.Default)); LibraryDependencyType.Default));
} }
foreach (var frameworkAssembly in targetLibrary.FrameworkAssemblies) if (!targetFramework.IsPackageBased)
{ {
dependencies.Add(new LibraryRange( // Only add framework assemblies for non-package based frameworks.
frameworkAssembly, foreach (var frameworkAssembly in targetLibrary.FrameworkAssemblies)
LibraryType.ReferenceAssembly, {
LibraryDependencyType.Default)); dependencies.Add(new LibraryRange(
frameworkAssembly,
LibraryType.ReferenceAssembly,
LibraryDependencyType.Default));
}
} }
} }