diff --git a/src/Add-BindingRedirect/CsprojReading/CsprojReferenceScanner.cs b/src/Add-BindingRedirect/CsprojReading/CsprojReferenceScanner.cs index 7004a4d..69d8055 100644 --- a/src/Add-BindingRedirect/CsprojReading/CsprojReferenceScanner.cs +++ b/src/Add-BindingRedirect/CsprojReading/CsprojReferenceScanner.cs @@ -2,12 +2,25 @@ 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; + private bool excludeEnabled = false; + + public CsprojReferenceScanner(string excludeAssemblyRegex) + { + if (!string.IsNullOrWhiteSpace(excludeAssemblyRegex)) + { + this.excludeAssemblyRegex = new Regex(excludeAssemblyRegex); + this.excludeEnabled = true; + } + } + public IEnumerable ScanForReferencedAssemblies(FileInfo csproj) { XDocument xml; @@ -20,9 +33,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 => !(excludeEnabled && 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); } }