SkiaSharp DLL version conflict when plugin uses a newer version than a native Milestone plugin

Hello,

We are in the process of updating a dependency (LiveChartsCore) in our project due to important bug fixes, and that dependency needs a newer version of SkiaSharp, version 3.0.0. However, it seems like there’s a conflict between the new version of SkiaSharp and the one used by a native Milestone plugin located in this path:

"[C:\Program](file:C:/Program) Files\Milestone\XProtect Smart Client\plugin\VideoOS.RemoteClient.Plugin.GisMap\SkiaSharp.dll" (version 2.88.8)

Deleting this plugin makes the issue go away.

The Smart Client refuses to even run the code in overriden methods such as Init() or GenerateUserControl(). Placing the code in a method of its own will throw a MissingMethodException, which I have attached to this post.

I have attached an edited SDK sample plugin where the issue can be reproduced by simply trying to load the plugin. I put the triggering code in it’s own method so Smart Client will throw the MissingMethodException.

What are your thoughts on this? Please let me know if you need more information.

I had to ask Milestone Development and this is the feedback..

--

We’ve identified that the issue you’re experiencing is due to inconsistencies between SkiaSharp v2.88.8, which is now used by the Smart Client Smart Map (GisMap) feature, and the newer SkiaSharp 3.0.0-preview used by LiveChartsCore. The version discrepancy causes conflicts, resulting in the MissingMethodException you’re encountering.

To work around this issue, we recommend importing the following additional NuGet packages:

  • SkiaSharp v2.88.9
  • SkiaSharp.Views.Desktop.Common v2.88.9

Both v2.88.8 and v2.88.9 are compatible, with no breaking changes introduced, so this workaround should resolve the conflict without affecting functionality.

We are aware that this workaround is not a sustainable solution in the long run, and will try and see if we can prevent this from happening again in the future.