You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移依赖System.Windows.Forms的类库,兼容双框架遇CS0234错误

解决方案

核心思路

放弃.NET Standard 2.0,改用多目标框架直接针对.NET Framework和.NET Core/.NET 5+的Windows平台。因为System.Windows.Forms是Windows专属组件,不属于.NET Standard的通用API集合,无法通过.NET Standard实现跨框架兼容。

步骤1:修改项目配置文件(.csproj)

替换原有配置为多目标框架设置,同时启用Windows Forms支持:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
  <PropertyGroup>
    <!-- 同时针对.NET Framework 4.8和.NET 6 Windows平台,可根据需求调整版本 -->
    <TargetFrameworks>net48;net6.0-windows</TargetFrameworks>
    <!-- 对所有目标框架启用Windows Forms -->
    <UseWindowsForms>true</UseWindowsForms>
  </PropertyGroup>
</Project>
  • 可根据实际需求调整目标框架版本,比如用net462替代net48,或net7.0-windows替代net6.0-windows。
  • .NET Core/.NET 5+必须指定-windows后缀,因为WinForms是该平台下的Windows特有组件。

步骤2:修正代码中的潜在问题

代码中Win32Exception属于System.ComponentModel命名空间,需补充引用:

using System;
using System.ComponentModel; // 新增此引用
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace NetUtils
{
    public class NDUtils
    {
        public void ShowConnectDialog(Form ParentForm)
        {
            zDisplayDialog(ParentForm, 1);
        }

        public void ShowDisconnectDialog(Form ParentForm)
        {
            zDisplayDialog(ParentForm, 2);
        }

        private void zDisplayDialog(Form poParentForm, int piDialog)
        {
            int num = -1;
            int phWnd = 0;
            if (poParentForm != null)
            {
                phWnd = poParentForm.Handle.ToInt32();
            }
            switch (piDialog)
            {
            case 1:
                num = WNetConnectionDialog(phWnd, 1);
                break;
            case 2:
                num = WNetDisconnectDialog(phWnd, 1);
                break;
            }
            if (num > 0)
            {
                throw new Win32Exception(num);
            }
            poParentForm.BringToFront();
        }

        [DllImport("mpr.dll")]
        private static extern int WNetConnectionDialog(int phWnd, int piType);

        [DllImport("mpr.dll")]
        private static extern int WNetDisconnectDialog(int phWnd, int piType);
    }
}

补充说明

  • 多目标框架编译后会生成对应不同平台的程序集,.NET Framework应用可引用net48版本,.NET Core/.NET 5+ Windows应用可引用net6.0-windows版本,实现双向兼容。
  • 若后续遇到API差异问题,可使用条件编译指令区分不同框架的代码逻辑:
#if NETFRAMEWORK
    // .NET Framework专属代码
#else
    // .NET Core/.NET 5+专属代码
#endif

内容的提问来源于stack exchange,提问作者Oliver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:55:20