PowerShell Tip: You may not need to load the DLL for that Assembly that can't be found
Recently, I wanted to access the System.Windows.Forms.Integration.ElementHost
type, which uses the System.Windows.Forms.Integration
namespace.
When I tried to load that namespace, PowerShell complained that The assembly 'System.Windows.Forms.Integration' could not be found.
I read up and found that the WindowsFormsIntegration.dll would need to be loaded, and I begrudgingly added this to my script:
1# This needs to be manual for some reason
2$netpath = [System.Reflection.Assembly]::GetExecutingAssembly().ImageRuntimeVersion
3$wpforms = "$env:SystemRootMicrosoft.NETFramework$netpathWPFWindowsFormsIntegration.dll"
4[System.Reflection.Assembly]::LoadFile($wpforms) | Out-Null
It's ugly though, and I wondered if there was another way. Then I thought maybe I can just add the base name of the DLL file, and sure enough, this works!
1Add-Type -AssemblyName WindowsFormsIntegration
So the next time that you see an assembly can't be found can be loaded by using the DLL, try just the DLL name instead!