You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

59 lines
2.3 KiB

using System;
using System.IO;
using System.Linq;
namespace WinIn.FasterZ.AgGridReport;
/// <summary>
/// This class is used to find root path of the web project. Used for;
/// 1. unit tests (to find views).
/// 2. entity framework core command line commands (to find the conn string).
/// </summary>
public static class WebContentDirectoryFinder
{
public static string? CalculateContentRootFolder()
{
var domainAssemblyDirectoryPath =
Path.GetDirectoryName(typeof(AgGridReportDomainModule).Assembly.Location);
if (domainAssemblyDirectoryPath == null)
{
throw new Exception(
$"Could not find location of {typeof(AgGridReportDomainModule).Assembly.FullName} assembly!");
}
var directoryInfo = new DirectoryInfo(domainAssemblyDirectoryPath);
if (Environment.GetEnvironmentVariable("NCrunch") == "1")
{
while (!DirectoryContains(directoryInfo.FullName, "WinIn.FasterZ.AgGridReport.Web.csproj", SearchOption.AllDirectories))
{
directoryInfo = directoryInfo.Parent ?? throw new Exception("Could not find content root folder!");
}
var webProject = Directory.GetFiles(directoryInfo.FullName, string.Empty, SearchOption.AllDirectories)
.First(filePath => string.Equals(Path.GetFileName(filePath), "WinIn.FasterZ.AgGridReport.Web.csproj"));
return Path.GetDirectoryName(webProject);
}
while (!DirectoryContains(directoryInfo.FullName, "WinIn.FasterZ.AgGridReport.sln"))
{
directoryInfo = directoryInfo.Parent ?? throw new Exception("Could not find content root folder!");
}
var webFolder = Path.Combine(directoryInfo.FullName, $"src{Path.DirectorySeparatorChar}WinIn.FasterZ.AgGridReport.Web");
if (Directory.Exists(webFolder))
{
return webFolder;
}
throw new Exception("Could not find root folder of the web project!");
}
private static bool DirectoryContains(string directory, string fileName,
SearchOption searchOption = SearchOption.TopDirectoryOnly)
{
return Directory.GetFiles(directory, string.Empty, searchOption)
.Any(filePath => string.Equals(Path.GetFileName(filePath), fileName));
}
}