Ubuntu系统下用C#完成课程作业遇System.Windows.Forms等库报错求助
嘿,我之前在Ubuntu上做C#课程作业的时候也碰到过几乎一模一样的问题!给你分享几个我试过的可行方案,不一定非要去折腾虚拟机~
问题拆解与解决方案
1. 先说说System.Windows.Forms的坑
System.Windows.Forms是Windows专属的UI框架,.NET Core/.NET 5+在Linux(包括Ubuntu)上原生不支持正式版的WinForms(虽然有实验性的预览支持,但稳定性和兼容性都拉胯,完全不适合课程作业)。
如果你的课程明确要求必须用WinForms,那确实得用Windows环境,但有比虚拟机更轻便的选择:
- 用WSL2:现在WSL2已经支持无缝运行Windows GUI应用了,你可以在Ubuntu的WSL2里开启GUI支持,然后安装Windows版本的.NET和VS Code/Visual Studio,直接跑WinForms程序,启动速度和流畅度比虚拟机好太多。
- 要是实在不想折腾WSL,虚拟机装Windows+Visual Studio也是稳的,就是启动和运行会慢一些。
2. SqlDataAdapter用不了?大概率是项目配置错了
SqlDataAdapter这类数据库类库在Linux上的.NET是完全支持的,你用不了大概率是没装对NuGet包或者项目类型不对:
- 首先确保你的项目是控制台/类库项目(别用WinForms项目,因为本身就跑不起来),然后打开终端,在项目目录下执行这个命令装官方推荐的SqlClient包:
dotnet add package Microsoft.Data.SqlClient - 装完之后,在代码里引用
using Microsoft.Data.SqlClient;,就能正常用SqlDataAdapter、SqlConnection这些类了。 - 另外要注意,连接MSSQL Server的时候,得确保Ubuntu能访问到你的数据库实例(不管是用Docker在本地跑的MSSQL,还是远程服务器),连接字符串要配置对,比如:
string connectionString = "Server=你的服务器IP;Database=你的数据库名;User Id=sa;Password=你的密码;TrustServerCertificate=True;";
3. 要是课程允许,试试跨平台替代方案
如果课程没强制要求必须用WinForms,完全可以换跨平台的UI框架,比如Avalonia UI或者MAUI,这俩都支持Linux,用C#开发,功能足够应付大部分课程作业。
数据库操作方面,也可以试试Entity Framework Core,这是跨平台的ORM,写起来比直接用SqlDataAdapter简洁,还支持MSSQL Server。
内容的提问来源于stack exchange,提问作者Vlad Potra
相关产品推荐
相关产品推荐

