Compute msbuild project path relative to root project path

This commit is contained in:
Mihai Codoban 2016-03-25 16:14:57 -07:00
parent ca2707292e
commit 90240a431b
2 changed files with 21 additions and 5 deletions

View file

@ -193,7 +193,7 @@ namespace Microsoft.DotNet.ProjectModel
if (target != null) if (target != null)
{ {
var nugetPackageResolver = new PackageDependencyProvider(PackagesDirectory, frameworkReferenceResolver); var nugetPackageResolver = new PackageDependencyProvider(PackagesDirectory, frameworkReferenceResolver);
var msbuildProjectResolver = new MSBuildDependencyProvider(ProjectResolver); var msbuildProjectResolver = new MSBuildDependencyProvider(Project ,ProjectResolver);
ScanLibraries(target, lockFileLookup, libraries, msbuildProjectResolver, nugetPackageResolver, projectResolver); ScanLibraries(target, lockFileLookup, libraries, msbuildProjectResolver, nugetPackageResolver, projectResolver);
} }
} }

View file

@ -12,10 +12,12 @@ namespace Microsoft.DotNet.ProjectModel.Resolution
{ {
public class MSBuildDependencyProvider public class MSBuildDependencyProvider
{ {
private readonly Project _rootProject;
private readonly Func<string, Project> _projectResolver; private readonly Func<string, Project> _projectResolver;
public MSBuildDependencyProvider(Func<string, Project> projectResolver) public MSBuildDependencyProvider(Project rootProject, Func<string, Project> projectResolver)
{ {
_rootProject = rootProject;
_projectResolver = projectResolver; _projectResolver = projectResolver;
} }
@ -28,13 +30,13 @@ namespace Microsoft.DotNet.ProjectModel.Resolution
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, targetFramework); PopulateDependencies(dependencies, targetLibrary, targetFramework);
var path = Path.GetDirectoryName(Path.GetFullPath(projectLibrary.MSBuildProject)); var msbuildProjectPath = GetMSbuildProjectPath(projectLibrary);
var exists = Directory.Exists(path); var exists = Directory.Exists(msbuildProjectPath);
var projectFile = projectLibrary.Path == null ? null : _projectResolver(projectLibrary.Path); var projectFile = projectLibrary.Path == null ? null : _projectResolver(projectLibrary.Path);
var msbuildPackageDescription = new MSBuildProjectDescription( var msbuildPackageDescription = new MSBuildProjectDescription(
path, msbuildProjectPath,
projectLibrary, projectLibrary,
targetLibrary, targetLibrary,
projectFile, projectFile,
@ -45,6 +47,20 @@ namespace Microsoft.DotNet.ProjectModel.Resolution
return msbuildPackageDescription; return msbuildPackageDescription;
} }
private string GetMSbuildProjectPath(LockFileProjectLibrary projectLibrary)
{
if (_rootProject == null)
{
throw new InvalidOperationException("Root xproj project does not exist. Cannot compute the path of its referenced csproj projects.");
}
var rootProjectPath = Path.GetDirectoryName(_rootProject.ProjectFilePath);
var msbuildProjectFilePath = Path.Combine(rootProjectPath, projectLibrary.MSBuildProject);
var msbuildProjectPath = Path.GetDirectoryName(Path.GetFullPath(msbuildProjectFilePath));
return msbuildProjectPath;
}
private void PopulateDependencies( private void PopulateDependencies(
List<LibraryRange> dependencies, List<LibraryRange> dependencies,
LockFileTargetLibrary targetLibrary, LockFileTargetLibrary targetLibrary,