in plugin-dotnet-agent/src/main/csharp/TeamCity.Dotnet.TestSuppressor/TeamCity.Dotnet.TestSuppressor/Domain/Targeting/Strategies/DirectoryTargetResolvingStrategy.cs [23:80]
public override IEnumerable<(IFileSystemInfo, TargetType)> Resolve(string target)
{
_logger.LogInformation("Resolving target directory: {Target}", target);
var directoryInfoResult = FileSystem.TryGetDirectoryInfo(target);
if (directoryInfoResult.IsError)
{
_logger.LogError(directoryInfoResult.ErrorValue, "Failed to resolve target directory: {Target}", target);
yield break;
}
var directoryInfo = directoryInfoResult.Value;
var slnFiles = GetFileSearchPattern(TargetType.Solution)
.SelectMany(sp => directoryInfo.GetFiles(sp, SearchOption.TopDirectoryOnly)).ToList();
var csprojFiles = GetFileSearchPattern(TargetType.Project)
.SelectMany(sp => directoryInfo.GetFiles(sp, SearchOption.TopDirectoryOnly)).ToList();
foreach (var msBuildBinlogFile in TryFindMsBuildBinlogFiles(directoryInfo))
{
_logger.LogInformation("Resolved MSBuild .binlog file in the target directory: {MsBuildBinlog}", msBuildBinlogFile.FullName);
yield return (msBuildBinlogFile, TargetType.MsBuildBinlog);
}
// not sure how to handle this
// TODO need to test how `dotnet test` handles this:
// 1. if there are multiple solutions in the directory
// 2. if there are multiple projects in the directory
// 3. if there are both solutions and projects in the directory
// 4. if there are no solutions or projects in the directory
if (slnFiles.Count != 0)
{
foreach (var slnFile in slnFiles)
{
_logger.LogInformation("Resolved solution in target directory: {Solution}", slnFile.FullName);
yield return (slnFile, TargetType.Solution);
}
}
else if (csprojFiles.Count != 0)
{
foreach (var csprojFile in csprojFiles)
{
_logger.LogInformation("Resolved project in target directory: {Project}", csprojFile.FullName);
yield return (csprojFile, TargetType.Project);
}
}
else
{
foreach (var fileSearchPattern in GetFileSearchPattern(TargetType.Assembly))
{
foreach (var assemblyFile in directoryInfo.GetFiles(fileSearchPattern, SearchOption.AllDirectories))
{
_logger.LogInformation("Resolved assembly in target directory: {Assembly}", assemblyFile.FullName);
yield return (assemblyFile, TargetType.Assembly);
}
}
}
}