src/ExeSinker.ps1

[CmdletBinding()]
param (
    [string]$inputFile,
    [switch]$removeResources,
    [switch]$removeVersionInfo
)

# AsmResolver 已由 Update-AsmResolver.ps1 裁剪并合并成单个 src/bin/AsmResolver.dll。
try {
    Add-Type -LiteralPath (Join-Path $PSScriptRoot 'bin/AsmResolver.dll') -ErrorVariable $null
}
catch {
    $_.Exception.LoaderExceptions | Out-String | Write-Verbose
    $Error.Remove($_)
}

$file = [AsmResolver.PE.PEImage]::FromFile($inputFile)
if ($removeResources) {
    $file.Resources = $null
}
elseif ($removeVersionInfo) {
    $file.Resources.Entries.Remove(($file.Resources.Entries | Where-Object { $_.Type -eq 'Version' })) | Out-Null
}
$file.DllCharacteristics = $file.DllCharacteristics -band -not [AsmResolver.PE.File.DllCharacteristics]::DynamicBase
$Builder = New-Object AsmResolver.PE.Builder.ManagedPEFileBuilder
$file = $builder.CreateFile($file)
$file.Write($inputFile)