58 lines
1.8 KiB
C#
58 lines
1.8 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using Microsoft.Extensions.Tools.Internal;
|
|
|
|
namespace Microsoft.Extensions.SecretManager.Tools.Internal
|
|
{
|
|
internal class MsBuildProjectFinder
|
|
{
|
|
private readonly string _directory;
|
|
|
|
public MsBuildProjectFinder(string directory)
|
|
{
|
|
Ensure.NotNullOrEmpty(directory, nameof(directory));
|
|
|
|
_directory = directory;
|
|
}
|
|
|
|
public string FindMsBuildProject(string project)
|
|
{
|
|
var projectPath = project ?? _directory;
|
|
|
|
if (!Path.IsPathRooted(projectPath))
|
|
{
|
|
projectPath = Path.Combine(_directory, projectPath);
|
|
}
|
|
|
|
if (Directory.Exists(projectPath))
|
|
{
|
|
var projects = Directory.EnumerateFileSystemEntries(projectPath, "*.*proj", SearchOption.TopDirectoryOnly)
|
|
.Where(f => !".xproj".Equals(Path.GetExtension(f), StringComparison.OrdinalIgnoreCase))
|
|
.ToList();
|
|
|
|
if (projects.Count > 1)
|
|
{
|
|
throw new FileNotFoundException(Resources.FormatError_MultipleProjectsFound(projectPath));
|
|
}
|
|
|
|
if (projects.Count == 0)
|
|
{
|
|
throw new FileNotFoundException(Resources.FormatError_NoProjectsFound(projectPath));
|
|
}
|
|
|
|
return projects[0];
|
|
}
|
|
|
|
if (!File.Exists(projectPath))
|
|
{
|
|
throw new FileNotFoundException(Resources.FormatError_ProjectPath_NotFound(projectPath));
|
|
}
|
|
|
|
return projectPath;
|
|
}
|
|
}
|
|
} |