microsoft / WindowsAppSDK

The Windows App SDK empowers all Windows desktop apps with modern Windows UI, APIs, and platform features, including back-compat support, shipped via NuGet.
https://docs.microsoft.com/windows/apps/windows-app-sdk/
MIT License
3.86k stars 328 forks source link

InvalidCastException when trying to get string array from ApplicationData #4705

Open tipa opened 2 months ago

tipa commented 2 months ago

Describe the bug

When building the app with PublishAot=true, getting a string array from ApplicationData.Current.LocalSettings and casting it to the string[] type I get: System.InvalidCastException: 'Unable to cast object of type 'WinRT.IInspectable' to type 'System.String[]'.'

Steps to reproduce the bug

Set in csproj: <PublishAot>true</PublishAot>

ApplicationData.Current.LocalSettings.Values["test"] = new string[] { "a", "b", "c" };
var array = (string[])ApplicationData.Current.LocalSettings.Values["test"];

Expected behavior

No crash

Screenshots

image

NuGet package version

Windows App SDK 1.6.0: 1.6.240829007

Packaging type

Packaged (MSIX)

Windows version

Windows 11 version 22H2 (22621, 2022 Update)

IDE

Visual Studio 2022

Additional context

Example project: Test.zip

fabianoriccardi commented 2 months ago

I think I met the same/related issue on another example (WASDK v1.6, AOT enabled):

SelectionChangedEventArgs args = new([], []);

Throws invalidcastexception: "specified cast is not valid".

Scottj1s commented 2 months ago

@manodasanW Does this look related to the collection expression marshaling issue?

tipa commented 2 months ago

I'm also seeing crashes when setting an IEnumerable as ItemSource, like this: comboBox.ItemsSource = Enumerable.Range(0, 10).Select(x => new TestItem(x)); No crash when using .ToList() comboBox.ItemsSource = Enumerable.Range(0, 10).Select(x => new TestItem(x)).ToList();

image

If this is a separate issue and you want me to open a new issue, please let me know