ExcelFast.Init.ps1

# Register an assembly resolver for Windows PowerShell 5.1.

if ($PSEdition -eq 'Desktop' -and -not $global:ExcelFastAssemblyResolveRegistered)
{
    Write-Verbose "Registering assembly resolver for Windows PowerShell 5.1"
    $global:ExcelFastAssemblyResolveHandler = [System.ResolveEventHandler]{
        param($sender, $eventArgs)

        try
        {
            $requestedAssembly = New-Object System.Reflection.AssemblyName($eventArgs.Name)
            $requestedName = $requestedAssembly.Name
            if (-not $requestedName.StartsWith('System.', [System.StringComparison]::OrdinalIgnoreCase))
            {
                return $null
            }

            $alreadyLoaded = [AppDomain]::CurrentDomain.GetAssemblies() |
                Where-Object { $_.GetName().Name -eq $requestedName } |
                Select-Object -First 1
            if ($null -ne $alreadyLoaded)
            {
                return $alreadyLoaded
            }

            $moduleRoot = Split-Path -Parent $PSCommandPath
            $dependencyPath = Join-Path $moduleRoot ($requestedName + '.dll')
            if (-not (Test-Path $dependencyPath))
            {
                return $null
            }

            return [System.Reflection.Assembly]::LoadFrom($dependencyPath)
        }
        catch
        {
            return $null
        }
    }

    [AppDomain]::CurrentDomain.add_AssemblyResolve($global:ExcelFastAssemblyResolveHandler)
    $global:ExcelFastAssemblyResolveRegistered = $true
}