CommunityToolkit / CommunityToolkit/Labs-Windows
RivePlayer is not AoT compatible (Windows App SDK 1.6)
- Dominant language
- C#
- Stars
- 482
- Forks
- 89
- PR merge metrics
- No merged PRs in 30d
Description
Seems like tests are failing as a result of some issue with RivePlayer on `Microsoft.WindowsAppSdk` 1.6-preview1+ with AoT enabled:
```
System.TypeInitializationException: The type initializer for 'RiveSharp.Factory' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'rive' or one of its dependencies: The specified module could not be found. (0x8007007E)
Stack Trace:
at RiveSharp.RiveAPI.Factory_RegisterDelegates(FactoryDelegates delegates)
at RiveSharp.Factory..cctor()
--- End of inner exception stack trace ---
at RiveSharp.Scene..ctor()
at CommunityToolkit.Labs.WinUI.Rive.RivePlayer..ctor() in /_/components/RivePlayer/src/RivePlayer.cs:line 49
at RivePlayerExperiment.Tests.ExampleRivePlayerTestClass.ComplexAsyncLoadUIExampleWithoutDispatcherTest() in D:\a\Labs-Windows\Labs-Windows\components\RivePlayer\tests\ExampleRivePlayerTestClass.cs:line 121
at RivePlayerExperiment.Tests.ExampleRivePlayerTestClass.b__12_0() in /_/ProjectHeads/AllComponents/Tests.Wasdk/obj/x64/Release/net8.0-windows10.0.22621.0/win-x64/CommunityToolkit.Tooling.TestGen/CommunityToolkit.Tooling.TestGen.UIThreadTestMethodGenerator/ComplexAsyncLoadUIExampleWithoutDispatcherTest_ExampleRivePlayerTestClass.g.cs:line 15
```
_Originally posted by @Arlodotexe in https://github.com/CommunityToolkit/Labs-Windows/issues/561#issuecomment-2305885605_
It looks like this is happening because the `Rive.RiveSharp` package is using [runtime marshalling](https://learn.microsoft.com/en-us/dotnet/standard/native-interop/disabled-marshalling) to call the native binary [under the hood](https://github.com/rive-app/rive-sharp/blob/main/RiveSharp/RiveAPI.cs#L46), which isn't AoT/trim friendly.
This issue should only be present when using Wasdk 1.6+ with AoT enabled. Other platforms are unaffected, but NativeAoT is not compatible with runtime marshalling. For more information, see [Native interoperability best practices](https://learn.microsoft.com/en-us/dotnet/standard/native-interop/best-practices).
Fixing this will require changes to the underlying library. To avoid blocking the toolkit as a whole, the tests will be disabled on Wasdk until the issue can be resolved.
Contributor guide
Assessment
This issue has not been assessed yet.