-
Notifications
You must be signed in to change notification settings - Fork 8.1k
Description
Attempting to load a module that requires p/invoke from a third-party native library fails to load the library from the same folder as the DLL doing the p/invoking.
This used to work in PowerShell Core 6.1.0 but regressed between 6.2.0-preview1 and 6.2.0-preview2. It still works in Windows PowerShell.
The native library it's failing to locate is located in the same folder as the SkiaSharp.dll that is trying to locate it. See #8861 (comment) and that issue thread for why it was done in that fashion.
Steps to reproduce
Install-Module PSWordCloud
New-WordCloudExpected behavior
cmdlet New-WordCloud at command pipeline position 1
Supply values for the following parameters:
InputObject:
Actual behavior
new-wordcloud : The type initializer for 'PSWordCloud.WCUtils' threw an exception.
At line:1 char:1
+ new-wordcloud
+ ~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], TypeInitializationException
+ FullyQualifiedErrorId : System.TypeInitializationException
Querying for the base exception with $Error[0].Exception.GetBaseException() | Format-List * -F yields the following:
Message : Unable to load DLL 'libSkiaSharp' or one of its dependencies: The specified module could not be
found. (Exception from HRESULT: 0x8007007E)
TypeName :
Data : {}
InnerException :
TargetSite : IntPtr sk_fontmgr_ref_default()
StackTrace : at SkiaSharp.SkiaApi.sk_fontmgr_ref_default()
at SkiaSharp.SKFontManager.get_Default()
at PSWordCloud.WCUtils..cctor()
HelpLink :
Source : SkiaSharp
HResult : -2146233052
Environment data
Name Value
---- -----
PSVersion 6.2.0
PSEdition Core
GitCommitId 6.2.0
OS Microsoft Windows 10.0.17763
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
Note: The same was tested in a Mac environment (thanks @steviecoaster!) and also failed in the same way. I suspect it will be identical on Linux distros as well.
/cc @SteveL-MSFT