From 1b9a5eb704d40405f695ce7bef4a51830be60231 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Thu, 18 Jun 2026 17:47:18 +0200 Subject: [PATCH 1/2] fixe excluding --- src/Alias/Finder.cs | 35 ++++++++++++++++++++++++++++++++++- src/Alias/Program.cs | 5 ++--- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/Alias/Finder.cs b/src/Alias/Finder.cs index ad6d298..454c939 100644 --- a/src/Alias/Finder.cs +++ b/src/Alias/Finder.cs @@ -5,6 +5,7 @@ public static class Finder public static IEnumerable FindAssemblyInfos( IEnumerable assemblyNamesToAlias, IEnumerable allFiles, + IEnumerable assemblyNamesToExclude, string? prefix, string? suffix) { @@ -13,21 +14,30 @@ public static IEnumerable 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 FindAssemblyInfos( IEnumerable assemblyNamesToAlias, IEnumerable allFiles, + IEnumerable assemblyNamesToExclude, Func 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); @@ -58,4 +68,27 @@ static IEnumerable FindAssemblyInfos( } } } + + static bool IsExcluded(string name, IEnumerable namesToExclude) + { + foreach (var exclude in namesToExclude) + { + if (exclude.EndsWith('*')) + { + if (name.StartsWith(exclude.TrimEnd('*'))) + { + return true; + } + + continue; + } + + if (name == exclude) + { + return true; + } + } + + return false; + } } \ No newline at end of file diff --git a/src/Alias/Program.cs b/src/Alias/Program.cs index 0f8bf59..5c9673f 100644 --- a/src/Alias/Program.cs +++ b/src/Alias/Program.cs @@ -40,10 +40,9 @@ public static void Inner( bool internalize, Action 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:"); From ed424d0ef437e840dc297889c15a1ee9b60c6533 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Fri, 19 Jun 2026 11:10:57 +0200 Subject: [PATCH 2/2] updated exclusion test setup --- src/Tests/Tests.cs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/Tests/Tests.cs b/src/Tests/Tests.cs index 9f01848..9cd00ae 100644 --- a/src/Tests/Tests.cs +++ b/src/Tests/Tests.cs @@ -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 sampleExcludes = new() + { + "AssemblyToInclude", + "AssemblyToProcess" + }; + [Fact] public async Task RunSample() { @@ -194,11 +204,7 @@ public async Task RunSample() }, references: new(), keyFile: null, - assembliesToExclude: new() - { - "AssemblyToInclude", - "AssemblyToProcess" - }, + assembliesToExclude: sampleExcludes, prefix: "Alias_", suffix: null, internalize: true, @@ -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); }