From 65f36ef2250cca23d4404ef8676c0228e1304c66 Mon Sep 17 00:00:00 2001 From: Yash Patel Date: Tue, 7 May 2019 15:07:56 -0400 Subject: [PATCH 1/2] Allowing to exclude assembly names from being added in binding redirects optionally. --- .../CsprojReading/CsprojReferenceScanner.cs | 10 +++++++++- src/Add-BindingRedirect/Parameters.cs | 3 +++ src/Add-BindingRedirect/Program.cs | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Add-BindingRedirect/CsprojReading/CsprojReferenceScanner.cs b/src/Add-BindingRedirect/CsprojReading/CsprojReferenceScanner.cs index 7004a4d..f558270 100644 --- a/src/Add-BindingRedirect/CsprojReading/CsprojReferenceScanner.cs +++ b/src/Add-BindingRedirect/CsprojReading/CsprojReferenceScanner.cs @@ -2,12 +2,20 @@ using System.IO; using System.Linq; using System.Reflection; +using System.Text.RegularExpressions; using System.Xml.Linq; namespace Add_BindingRedirect.CsprojReading { public class CsprojReferenceScanner { + private Regex excludeAssemblyRegex; + + public CsprojReferenceScanner(string excludeAssemblyRegex) + { + this.excludeAssemblyRegex = new Regex(excludeAssemblyRegex); + } + public IEnumerable ScanForReferencedAssemblies(FileInfo csproj) { XDocument xml; @@ -20,9 +28,9 @@ public IEnumerable ScanForReferencedAssemblies(FileInfo csproj) .Descendants() .Where(xe => xe.Name.LocalName == "Reference") .ToArray(); - var assemblyNames = references .Select(r => r.Attribute("Include").Value) + .Where(r => !excludeAssemblyRegex.IsMatch(r)) .Select(n => new AssemblyName(n)) .ToArray(); diff --git a/src/Add-BindingRedirect/Parameters.cs b/src/Add-BindingRedirect/Parameters.cs index 1f3dee7..769e0b5 100644 --- a/src/Add-BindingRedirect/Parameters.cs +++ b/src/Add-BindingRedirect/Parameters.cs @@ -11,6 +11,9 @@ internal class Parameters [ParameterIsOptional] public string Directory { get; set; } + [ParameterIsOptional] + public string ExcludeAssemblyRegex { get; set; } + public Parameters() { Directory = System.IO.Directory.GetCurrentDirectory(); diff --git a/src/Add-BindingRedirect/Program.cs b/src/Add-BindingRedirect/Program.cs index 7aba449..cfdf37a 100644 --- a/src/Add-BindingRedirect/Program.cs +++ b/src/Add-BindingRedirect/Program.cs @@ -21,7 +21,7 @@ private static void Main(string[] args) var currentDirectory = new DirectoryInfo(parameters.Directory); - var bindingRedirector = new BindingRedirector(Log.Logger, new RecursingDirectoryScanner(), new CsprojReferenceScanner(), new AssemblyReferenceConsolidator()); + var bindingRedirector = new BindingRedirector(Log.Logger, new RecursingDirectoryScanner(), new CsprojReferenceScanner(parameters.ExcludeAssemblyRegex), new AssemblyReferenceConsolidator()); bindingRedirector.AddBindingRedirects(currentDirectory); } } From 85f20c709d48b16d96b66db4992a9c86c6e07b43 Mon Sep 17 00:00:00 2001 From: Yash Patel Date: Tue, 7 May 2019 15:36:29 -0400 Subject: [PATCH 2/2] Fixing issue with the exclude not enabled. --- .../CsprojReading/CsprojReferenceScanner.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Add-BindingRedirect/CsprojReading/CsprojReferenceScanner.cs b/src/Add-BindingRedirect/CsprojReading/CsprojReferenceScanner.cs index f558270..69d8055 100644 --- a/src/Add-BindingRedirect/CsprojReading/CsprojReferenceScanner.cs +++ b/src/Add-BindingRedirect/CsprojReading/CsprojReferenceScanner.cs @@ -10,10 +10,15 @@ namespace Add_BindingRedirect.CsprojReading public class CsprojReferenceScanner { private Regex excludeAssemblyRegex; + private bool excludeEnabled = false; public CsprojReferenceScanner(string excludeAssemblyRegex) { - this.excludeAssemblyRegex = new Regex(excludeAssemblyRegex); + if (!string.IsNullOrWhiteSpace(excludeAssemblyRegex)) + { + this.excludeAssemblyRegex = new Regex(excludeAssemblyRegex); + this.excludeEnabled = true; + } } public IEnumerable ScanForReferencedAssemblies(FileInfo csproj) @@ -30,7 +35,7 @@ public IEnumerable ScanForReferencedAssemblies(FileInfo csproj) .ToArray(); var assemblyNames = references .Select(r => r.Attribute("Include").Value) - .Where(r => !excludeAssemblyRegex.IsMatch(r)) + .Where(r => !(excludeEnabled && excludeAssemblyRegex.IsMatch(r))) .Select(n => new AssemblyName(n)) .ToArray();