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

如何在VS Code中为C#项目添加.NET Core内置程序集(以System.Windows.Forms为例)

解决VS Code中C#项目添加System.Windows.Forms的问题

我来帮你搞定这个问题——你遇到的错误核心原因是引用了仅用于编译的引用程序集(Reference Assembly),这类文件只有类型定义,没有实际运行代码,所以运行时加载必然失败。下面是正确的操作流程和问题解析:

问题原因解析

你手动添加的<Reference>节点指向的System.Windows.Forms.dll大概率来自.NET的引用程序集包(比如路径在C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\...下),这类dll是给编译器做类型检查用的“存根文件”,完全不能用来执行,所以才会抛出Reference assemblies should not be loaded for execution的错误。

正确的解决步骤

System.Windows.Forms在.NET Core/.NET 5+中是通过NuGet包提供的,不需要手动引用系统dll,按以下步骤操作:

1. 确认项目目标框架

确保你的项目目标框架是.NET Core 3.0及以上版本,并且是Windows专属的目标框架(比如net8.0-windows)。如果还没设置,打开项目文件(.csproj)修改:

<PropertyGroup>
  <TargetFramework>net8.0-windows</TargetFramework>
</PropertyGroup>

2. 启用Windows Forms支持

在项目文件的<PropertyGroup>里添加UseWindowsForms属性,这会自动引入所有Windows Forms所需的运行时依赖和程序集:

<PropertyGroup>
  <OutputType>WinExe</OutputType> <!-- 针对纯WinForms项目,隐藏控制台窗口 -->
  <TargetFramework>net8.0-windows</TargetFramework>
  <UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>

3. 安装System.Windows.Forms NuGet包(可选但推荐)

虽然启用UseWindowsForms后会自动引入依赖,但你也可以手动通过终端命令安装,确保依赖最新:

dotnet add package System.Windows.Forms

完成以上步骤后,你就可以正常在代码里引用System.Windows.Forms命名空间,编译和运行都不会出错了。

补充:调试时窗口消失的处理

如果你的项目是控制台类型(<OutputType>Exe</OutputType>),调试时窗口一闪而过是因为程序执行完Main方法就退出了。要解决这个问题,确保在Main方法里启动WinForms应用:

using System.Windows.Forms;

namespace MyProgram
{
    class Program
    {
        static void Main(string[] args)
        {
            // 初始化WinForms环境
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            // 启动主窗体,这会让程序保持运行直到窗体关闭
            Application.Run(new Form1());
        }
    }
}

如果是纯WinForms项目,设置<OutputType>WinExe</OutputType>即可,程序启动时不会显示控制台窗口,也会正常保持运行状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 07:37:33