Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 34 additions & 1 deletion src/Alias/Finder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ public static class Finder
public static IEnumerable<SourceTargetInfo> FindAssemblyInfos(
IEnumerable<string> assemblyNamesToAlias,
IEnumerable<string> allFiles,
IEnumerable<string> assemblyNamesToExclude,
string? prefix,
string? suffix)
{
Expand All @@ -13,21 +14,30 @@ public static IEnumerable<SourceTargetInfo> FindAssemblyInfos(
throw new ErrorException("Either prefix or suffix must be defined.");
}

return FindAssemblyInfos(assemblyNamesToAlias, allFiles, name => $"{prefix}{name}{suffix}");
return FindAssemblyInfos(assemblyNamesToAlias, allFiles, assemblyNamesToExclude, name => $"{prefix}{name}{suffix}");
}

static IEnumerable<SourceTargetInfo> FindAssemblyInfos(
IEnumerable<string> assemblyNamesToAlias,
IEnumerable<string> allFiles,
IEnumerable<string> assemblyNamesToExclude,
Func<string, string> getTargetName)
{
assemblyNamesToAlias = assemblyNamesToAlias.ToList();
var namesToExclude = assemblyNamesToExclude.ToList();

foreach (var file in allFiles)
{
var name = Path.GetFileNameWithoutExtension(file);
var fileDirectory = Path.GetDirectoryName(file)!;
var isAliased = false;

if (IsExcluded(name, namesToExclude))
{
yield return new(name, file, name, file, false);
continue;
}

foreach (var assemblyToAlias in assemblyNamesToAlias)
{
var targetName = getTargetName(name);
Expand Down Expand Up @@ -58,4 +68,27 @@ static IEnumerable<SourceTargetInfo> FindAssemblyInfos(
}
}
}

static bool IsExcluded(string name, IEnumerable<string> namesToExclude)
{
foreach (var exclude in namesToExclude)
{
if (exclude.EndsWith('*'))
{
if (name.StartsWith(exclude.TrimEnd('*')))
{
return true;
}

continue;
}

if (name == exclude)
{
return true;
}
}

return false;
}
}
5 changes: 2 additions & 3 deletions src/Alias/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,9 @@ public static void Inner(
bool internalize,
Action<string> log)
{
var list = Directory.GetFiles(directory, "*.dll", SearchOption.AllDirectories).ToList();
var allFiles = list.Where(x => !assembliesToExclude.Contains(x));
var allFiles = Directory.GetFiles(directory, "*.dll", SearchOption.AllDirectories);

var assemblyInfos = Finder.FindAssemblyInfos(assemblyNamesToAlias, allFiles, prefix, suffix)
var assemblyInfos = Finder.FindAssemblyInfos(assemblyNamesToAlias, allFiles, assembliesToExclude, prefix, suffix)
.ToList();

var builder = new StringBuilder("Resolved assemblies to alias:");
Expand Down
21 changes: 16 additions & 5 deletions src/Tests/Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,16 @@ await Verify(

#if DEBUG

// Assemblies excluded from aliasing in RunSample. Shared between the aliasing
// call and PatchDependencies so the two can never drift: an excluded assembly
// keeps its original name on disk, so its deps.json entry must not be rewritten
// to Alias_* (doing so makes the runtime probe for a file that doesn't exist).
static readonly List<string> sampleExcludes = new()
{
"AssemblyToInclude",
"AssemblyToProcess"
};

[Fact]
public async Task RunSample()
{
Expand All @@ -194,11 +204,7 @@ public async Task RunSample()
},
references: new(),
keyFile: null,
assembliesToExclude: new()
{
"AssemblyToInclude",
"AssemblyToProcess"
},
assembliesToExclude: sampleExcludes,
prefix: "Alias_",
suffix: null,
internalize: true,
Expand Down Expand Up @@ -227,6 +233,11 @@ static void PatchDependencies(string targetPath)
var depsFile = Path.Combine(targetPath, "SampleApp.deps.json");
var text = File.ReadAllText(depsFile);
text = text.Replace("Assembly", "Alias_Assembly");
foreach (var name in sampleExcludes)
{
text = text.Replace($"Alias_{name}", name);
}

File.Delete(depsFile);
File.WriteAllText(depsFile, text);
}
Expand Down
Loading