【.NET 5.0】WPF使用弹窗选择文件和文件夹

一开始使用下面方法调起文件夹窗,始终提示 System.Windows.Forms 这个命名空间无法引入.

// 选择文件夹 
System.Windows.Forms.FolderBrowserDialog FolderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); 
if (FolderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    txt.Text = FolderBrowserDialog.SelectedPath;
}

我以为是依赖项没有引入,后面搜索 system.Windows.Forms,找不到,只有 System_Windows_Forms,添加之后重新编译也是失败。

最后我发现:在解决方案 --> 项目上鼠标右键,点击属性发现我创建的目标框架是【.NET 5.0】,

在项目文件里面添加下面代码重新编译时也编译失败,提示:NU1102 找不到版本为 (>= 5.0.2) 的包 System.Windows.Forms

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net5.0-windows</TargetFramework>
    <!-- 其他属性... -->
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Windows.Compatibility" Version="5.0.2" />
    <!-- 添加下面这一行 -->
    <PackageReference Include="System.Windows.Forms" Version="5.0.2" />
  </ItemGroup>
</Project>

最后通过询问 ChatGPT 得知:WinForms 已经不再是一个默认引用的包。在这种情况下,你需要将 UseWindowsForms 设为 true,并确保你的目标框架兼容 WinForms。

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net5.0-windows</TargetFramework>
    <!-- 添加下面这两行 -->
    <UseWindowsForms>true</UseWindowsForms>
    <UseWPF>true</UseWPF>
  </PropertyGroup>
</Project>

完美解决!

posted @ 2024-01-17 21:33  叫夏洛啊  阅读(671)  评论(0编辑  收藏  举报