如何在.NET Core3.1 类库项目中使用System.Windows.Forms

网上说法大多都是直接添加对.Net Framework框架的引用,但是这种方法打包很不友好。于是开始了网络搜索,翻到了微软的文档,才找到直接引用 System.Windows.Froms 程序集的方法。还隐藏的很深,地址:Upgrade a Windows Forms app to .NET 7 - Windows Forms .NET | Microsoft Learn

很明显没有这个System.Windows.Forms程序集,要求 .Net Core 版本 >= 3.0,其实只要修改项目的csproj文件就好了:

可以使用记事本或在项目上直接左键双击:

初始化文件内容大致如下:

修改第一行的SDK,注意多的这个WindowsDesktop

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

修改PropertyGroup:

<PropertyGroup>

<TargetFramework>netcoreapp3.1</TargetFramework>

<OutputType>Library</OutputType>

<UseWindowsForms>true</UseWindowsForms>

</PropertyGroup>

在.NET Core 3.1中使用WPF或Winforms的示例:需要添加UseWPF和UseWindowsForms标记:

<UseWPF>true</UseWPF>

<UseWindowsForms>true</UseWindowsForms>

修改完成之后,代码显示即正常了:

生成项目也是成功的:

如果使用net6.0的话,可以直接写 <TargetFramework>net6.0-windows</TargetFramework> 即可。

针对.NET Core < 3,它在Windows上没有WinForms,但是,如果您需要在Linux上使用WinForms进行编译,则仍然有效,因为.NET Core WinForms仅在Windows上运行。

混合框架当然是解决问题的一种方法-但是,为什么要使用.NET Core?

但是您可以做的是将System.Windows.Forms的单声道实现移植到NetStandard。

如这里:https://github.com/ststeiger/System.CoreFX.Forms

希望本文对你有帮助。

相关推荐
睡前要喝豆奶粉11 小时前
多表分页联查——EF Core方式和Dapper方式
c#·.netcore
csdn_aspnet19 小时前
.NETCore、.NET 7 和 RabbitMQ 的发布-订阅模式
rabbitmq·.netcore·.net7.
爱吃香蕉的阿豪20 小时前
深入理解 .NET Core 中的 IServiceScopeFactory:用法、场景与静态类依赖注入
.netcore
sky-stars2 天前
.NET 泛型编程(泛型类、泛型方法、泛型接口、泛型委托、泛型约束)
c#·.net·.netcore
The Sheep 20232 天前
.NetCoreMVC 开发网页使用sass
.netcore·sass
宝桥南山3 天前
.NET10 - 尝试一下Blazor Web Assembly Standalone App的fingerprint新特性
microsoft·微软·c#·asp.net·.net·.netcore
Crazy Struggle4 天前
一行代码快速开发 AntdUI 风格的 WinForm 通用后台框架
.net·winform·antdui
刚子编程5 天前
ASP.NET Core Blazor 核心功能一:Blazor依赖注入与状态管理指南
开发语言·.netcore·blazor
是萝卜干呀5 天前
Backend - HTTP请求的常用返回类型(asp .net core MVC)
http·c#·.netcore·iactionresult
精神小伙就是猛5 天前
.Net Core基于EasyCore.EventBus实现事件总线
微服务·.netcore