Public/DotNet/Add-AssemblyBindingRedirect.ps1

function Add-AssemblyBindingRedirect {
    [CmdletBinding()]
    [CmdLetTag("#dotnet")]
    param (
        [parameter(ValueFromPipelineByPropertyName, Mandatory)]
        [ArgumentCompleter({
            [OutputType([System.Management.Automation.CompletionResult])]  # zero to many
            param(
                [string] $CommandName,
                [string] $ParameterName,
                [string] $WordToComplete,
                [System.Management.Automation.Language.CommandAst] $CommandAst,
                [System.Collections.IDictionary] $FakeBoundParameters
            )
            
            (Find-Nugetpackage -name $WordToComplete).Id
        })]
        [string]$Id,
        [parameter(ValueFromPipelineByPropertyName,Mandatory)]
        [string]$Version,
        [parameter(Mandatory)]
        [System.IO.FileInfo]$ConfigFile = (Get-Location),
        [string]$Culture = "neutral",
        [parameter(Mandatory)]
        [string]$PublicToken
    )
    
    begin {
        $PSCmdlet|Write-PSCmdLetBegin
        $xml = @()
        [xml]$config = Get-Content $configFile
        if (!$config.SelectSingleNode("//runtime")){
            Add-XmlElement -Owner $config -elementName "runtime" -parent "configuration" 
            $Config|Save-Xml $ConfigFile
        }
    }
    
    process {
        
        $binding = $config.configuration.runtime.assemblyBinding.dependentAssembly | Where-Object { $_.assemblyIdentity.name -eq $id }
        if ($binding) {
            $binding.assemblyIdentity.name=$Id
            $binding.bindingRedirect.oldVersion = "0.0.0.0-$Version"
            $binding.bindingRedirect.newVersion = $Version
        }
        else {
            $xml += @"
`n
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="$id" publicKeyToken="$PublicToken" culture="$culture" />
                <bindingRedirect oldVersion="0.0.0.0-$Version" newVersion="$Version" />
            </dependentAssembly>
        </assemblyBinding>
"@

        
        }
    }
    end {
        $config.SelectSingleNode("//runtime").InnerXml += $xml
        $config|Save-Xml $configFile|Out-Null
    }
}