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

如何在C#程序运行时获取与VS 2022调试模块窗口一致的模块列表?

如何在C#程序运行时获取与VS 2022调试模块窗口一致的模块列表?

我太懂你这种困惑了——用Process.GetCurrentProcess().Modules拿到的模块列表和VS 2022调试窗口里的差得离谱,一个50个一个才11个,完全不是一回事对吧?

先给你说清楚为啥会有这个差异:
VS的Debug > Modules窗口默认会做过滤,它只展示和你的项目直接相关的核心模块——比如你的主程序集、你自己写的类库、还有你手动引用的第三方依赖;那些系统级的底层DLL(比如kernel32.dll、clr.dll这类.NET运行时组件)、CLR自动加载的基础模块,它都会默认隐藏起来。而Process.GetCurrentProcess().Modules可是实打实返回进程中所有被加载的模块,不管是你的代码还是系统底层依赖的,所以数量自然差很多。

那怎么拿到和VS窗口一模一样的列表呢?给你两个实用的思路:

方法一:通过模块路径过滤(针对原生+托管模块)

VS窗口里显示的模块基本都在你的应用程序输出目录下,所以我们可以只保留路径匹配应用目录的模块:

using System.Diagnostics;
using System.IO;
using System.Linq;

public static List<ProcessModule> GetVsMatchingModules()
{
    var currentProcess = Process.GetCurrentProcess();
    // 获取当前程序的输出目录
    var appRoot = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
    
    // 过滤出在应用目录下的模块
    return currentProcess.Modules.Cast<ProcessModule>()
        .Where(module => module.FileName != null 
            && module.FileName.StartsWith(appRoot, StringComparison.OrdinalIgnoreCase))
        .ToList();
}

这个方法能精准筛选出你的项目直接相关的模块,和VS窗口里显示的核心内容基本一致。

方法二:针对托管程序集的精准筛选

如果你的项目是纯托管的(.NET Framework/.NET Core/.NET 5+),可以直接获取当前加载的托管程序集,再过滤掉系统自带的那些:

using System.Reflection;
using System.Linq;

public static List<Assembly> GetManagedModulesLikeVs()
{
    return AppDomain.CurrentDomain.GetAssemblies()
        .Where(assembly => 
            // 排除动态生成的程序集
            !assembly.IsDynamic 
            // 排除系统自带的程序集(System、Microsoft开头的)
            && !assembly.FullName.StartsWith("System.", StringComparison.OrdinalIgnoreCase)
            && !assembly.FullName.StartsWith("Microsoft.", StringComparison.OrdinalIgnoreCase))
        .ToList();
}

这个拿到的就是VS窗口里显示的托管模块列表,完全是你自己的代码和自定义引用的依赖。

额外提示

如果你想完全复刻VS的过滤逻辑,还可以参考VS的Modules窗口设置:你可以打开VS的Modules窗口,点击右上角的"筛选"按钮,看看它的默认过滤规则(比如"显示用户代码"、"隐藏系统模块"),然后把这些规则转成代码里的过滤条件就行。

备注:内容来源于stack exchange,提问作者Zoli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:03:01