【问题标题】:Use Windows Forms in a .Net Core Class Library - .NET Core Control Library在 .Net Core 类库中使用 Windows 窗体 - .NET Core 控件库
【发布时间】:2022-03-01 08:18:26
【问题描述】:

我正在尝试创建一个引用 .net core 3 版本的 winform 的 .net core 3 类库(因此该程序集本身可以被 .net core 3 WinForm 程序集引用)。

一个新的 .net 核心 WinForm 项目引用了 Microsoft.WindowsDesktop.App.WindowsForms,但是我找不到任何具有该名称的 nuget 包。

我需要做什么才能引用 .net core 3 winform?

【问题讨论】:

  • 是“net core 3 winform”吗?您是否正在尝试将旧的 winforms 应用程序迁移到 .net 核心?
  • It looks 对我来说是测试版,谷歌说发布时间是 2019 年 9 月。没有表单设计器.. kek。
  • 我正在尝试从头开始编写(而不是迁移)一个 WinForm 帮助程序程序集,以便在 .net core 3 WinForm 应用程序之间共享。有一个用于创建 .net core 3 WinForm 应用程序的 UI。我只是找不到创建引用 WinForm 的 .net core 3 类程序集的方法。

标签: c# winforms .net-core


【解决方案1】:

更新:在更高版本的 VS 2019(我尝试了 16.8.2 版)中,有一个适用于 .NET Core 的 Windows 窗体控件库 的项目模板。 p>

目前Windows Forms .NET Core 处于预览模式,我不知道 VS 2019 16.2.2 中 .NET Core 中 Windows 窗体控件库的任何官方 Nuget 包或项目模板。

但要创建 Windows 窗体控件库,您可以使用以下说明:

  1. 添加类型为 类库 (.NET Core) 的新项目
  2. 项目创建后,右键单击项目文件并选择编辑项目文件
  3. 将项目SDK改为<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
  4. 通过添加 <UseWindowsForms>true</UseWindowsForms> 将 Windows 窗体指定为 UI 技术。

现在项目文件应该如下所示:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
  <PropertyGroup>
    <OutputType>Library</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <UseWindowsForms>true</UseWindowsForms>
  </PropertyGroup>
</Project>

现在您可以将FormUserControl 等Windows 窗体元素添加到此项目中,并毫无问题地构建项目。

【讨论】:

  • 如果由于某种原因您正在寻找 dll,您可以在 C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\3.0.0-preview6-27626-01\ref\netcoreapp3.0 中找到它们(取决于已安装的框架版本)。
  • 我尝试了您的建议,但该项目中没有提供“System.Windows.Forms”命名空间。
  • 你好 Reza,很好的答案,它适用于 netcoreapp3.0。我有一种感觉,在它开始工作之前我必须关闭一次视觉工作室。你知道一种让它也适用于 .netstandard2.0 和 .netstandard2.1 的方法吗?我还没有做到这一点。
  • @JRB 你有没有想过如何使用标准 2.1 做到这一点?
  • @JRB 感谢您的更新。这似乎是让 winforms 工作的正确做法。非标准核心的类程序集
【解决方案2】:

我有一个核心 3.1 Web 应用程序,它引用了一个依赖于 System.Windows.Forms 的 Framework 4.5.2 项目。我的解决方法是将以下行添加到 Web 应用程序 csproj 文件中:

FrameworkReference Include="Microsoft.WindowsDesktop.App.WindowsForms"

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

  <PropertyGroup>
    <TargetFrameworks>netcoreapp3.1</TargetFrameworks>
    <UseWindowsForms>true</UseWindowsForms>
  </PropertyGroup>

  <ItemGroup>
    <FrameworkReference Include="Microsoft.WindowsDesktop.App.WindowsForms" />
  </ItemGroup>

</Project>

【讨论】:

    【解决方案3】:

    目前接受的答案似乎有些过时。最近的语法要求在 TargetFramework 标记中指定目标,而不是在 Sdk 标记中:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Library</OutputType>
        <TargetFramework>net5.0-windows</TargetFramework>
        <UseWindowsForms>true</UseWindowsForms>
        <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
      </PropertyGroup>
    
    </Project>
    

    更多信息在这里

    【讨论】:

      【解决方案4】:

      或者,您可以添加一个 Windows 窗体类型的新项目,然后将输出类型设置为 Libray。

      <OutputType>Library</OutputType>
      

      【讨论】:

        【解决方案5】:

        对我来说,使用 net5 我的项目需要以下内容

        <Project Sdk="Microsoft.NET.Sdk">
        
          <PropertyGroup>
              <TargetFramework>net5.0-windows</TargetFramework>
              <UseWindowsForms>true</UseWindowsForms>
          </PropertyGroup>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-04-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多