.NET Core 上的 OpenFileDialog

OpenFileDialog on .NET Core

在 .NET Framework 上,您可以使用 System.Windows.Forms.OpenFileDialog 使用本机 Windows UI 打开文件,但这仅适用于 Windows。

.Net Core 或其他替代方案有 System.Windows.Forms.OpenFileDialog 实现?

.NET Core 本身不包含任何 UI 的 API。例如,https://docs.microsoft.com/en-us/dotnet/api/?view=netcore-2.0&term=File 不显示任何相关内容。这也是 .NET Core 开发者目前的立场: https://github.com/dotnet/core/issues/374

有几个外部库可以在特定平台上运行:

如果您没有真正依赖 .NET Core 本身。 UWP(建立在 .NET Standard 之上,但不同于 .NET Core)也可能是一个选项。

自从 .NET Core 添加了 support for Windows desktop applications,面向 .NET Core 的 WPF 和 Windows Forms 应用程序可以使用 OpenFileDialogSaveFileDialog API 的方式与他们会在 .NET Framework 中做。

这些 API 已移植到位于 .NET Core 3 及更高版本之上的 Windows 特定桌面包。

有了新的闪亮的 .NET 5.0 Windows 使用 WPF 控件的应用程序,可以使用 Microsoft.Win32 库中的 OpenFileDialog() 方法。它与 Windows 表单版本不同,例如 - ShowDialog() 方法 returns bool? 而不是 DialogResult.

这是示例 MyWpfView.xaml.cs 代码:

using Microsoft.Win32;
using System.Windows;

namespace TestProject {     
    public partial class MyWpfView 
    {
        public MyWpfView()
        {
            InitializeComponent();
        }
        
        private void BrowseButton_Click(object sender, RoutedEventArgs e)
        {
            var fileDialog = new OpenFileDialog();
            if (fileDialog.ShowDialog() == true)
            {
                FileTextBox.Text = fileDialog.FileName;
            }
        }
    }
}

看来你可以使用

<UseWindowsForms>true</UseWindowsForms>

在项目文件中,如果此应用仍适用于 Windows 平台。

我写这个答案是因为我看到很多使用 Microsoft.Win32 的答案,这基本上是一样的,但是你没有用于向后兼容代码的垫片。