ookii-dialogs / ookii-dialogs-wpf

Awesome dialogs for Windows Desktop applications built with Microsoft .NET (WPF)
BSD 3-Clause "New" or "Revised" License
1.14k stars 85 forks source link

System.ArgumentNullException in ComCtlv6ActivationContext #32

Closed mgpreston closed 3 years ago

mgpreston commented 3 years ago

I'm encountering the following error when running as a self-contained .NET 5 single-file bundle:

System.ArgumentNullException: Value cannot be null. (Parameter 'path1')
at System.IO.Path.Combine(String path1, String path2)
at Ookii.Dialogs.Wpf.ComCtlv6ActivationContext.EnsureActivateContextCreated()
at Ookii.Dialogs.Wpf.ComCtlv6ActivationContext..ctor(Boolean enable)
at Ookii.Dialogs.Wpf.TaskDialog.ShowDialog(IntPtr owner)
at Ookii.Dialogs.Wpf.TaskDialog.ShowDialog(Window owner)

The code that's responsible just looks like this:

var dialog = new VistaFolderBrowserDialog();
dialog.ShowDialog(Application.Current.MainWindow);

It looks like the ComCtlv6ActivationContext.EnsureActivateContextCreated method doesn't expect assemblyLoc to be an empty string, which it can be when running as a self-contained single-file bundle (see Remarks of Assembly.Location docs): https://github.com/augustoproiete/ookii-dialogs-wpf/blob/2a64fea6c5c3d32f468814d205a337ce78afedab/src/Ookii.Dialogs.Wpf/ComCtlv6ActivationContext.cs#L70-L79

The Path.GetDirectoryName method returns null when passed an empty string (even though the docs for it suggest an ArgumentException instead).

I guess this will no longer be a problem when issue #31 is implemented, but thought it worth mentioning as there doesn't seem to be an easy workaround.

augustoproiete commented 3 years ago

Thanks for reporting this @mgpreston!

You're correct: This won't be an issue when #31 is implemented, but the fact that self-contained .NET 5 single-file apps are breaking raises the priority for implementing it.

I'll get a release out tonight that fixes this issue.

augustoproiete commented 3 years ago

@mgpreston I've just published Ookii.Dialogs.Wpf v3.1.0 on nuget.org which fixes this

mgpreston commented 3 years ago

@augustoproiete Thanks for fixing this so quickly. I'm happy to report that it's working perfectly now!

augustoproiete commented 3 years ago

@mgpreston You're welcome! Thanks for confirming it works!