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-WordCloud
Expected 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 Stephen Valdinger (@steviecoaster)!) and also failed in the same way. I suspect it will be identical on Linux distros as well.
/cc Steve Lee (@SteveL-MSFT)
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
Expected behavior
Actual behavior
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 : -2146233052Environment 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.0Note: The same was tested in a Mac environment (thanks Stephen Valdinger (@steviecoaster)!) and also failed in the same way. I suspect it will be identical on Linux distros as well.
/cc Steve Lee (@SteveL-MSFT)