0

0

C# AppDomain使用方法 C# AppDomain是什么以及如何使用

星降

星降

发布时间:2026-02-10 10:05:02

|

321人浏览过

|

来源于php中文网

原创

AppDomain 在现代 C# 中已弃用,.NET Core 1.0 起不再支持,.NET 5+ 完全移除;仅限维护 .NET Framework 4.x 遗留项目使用,替代方案为 AssemblyLoadContext、OS 级隔离及组合异常处理机制。

c# appdomain使用方法 c# appdomain是什么以及如何使用

AppDomain 在现代 C# 中基本已弃用

从 .NET Core 1.0 开始,AppDomain 类型就不再被支持;.NET 5+ 完全移除了它。如果你正在写新项目(尤其是面向 .NET 5/6/7/8),AppDomain 不是可用选项——不是“怎么用”的问题,而是“不能用”。仅在维护遗留的 .NET Framework(4.x)桌面应用时才可能遇到它。

为什么 AppDomain 曾被用于隔离程序集

在 .NET Framework 时代,AppDomain 是进程内的逻辑隔离边界,主要用来:

  • 动态加载/卸载程序集(Assembly.LoadFrom 加载后无法卸载,但放在独立 AppDomain 中可整体卸载)
  • 限制权限(配合 AppDomain.CreateDomainPermissionSet 参数)
  • 捕获未处理异常(AppDomain.CurrentDomain.UnhandledException

但它的隔离性并不彻底(共享类型对象、静态字段仍可能跨域泄漏),且性能开销大、调试困难,早已被更轻量的方案替代。

替代 AppDomain 的现代做法

对应旧有需求,现在应转向:

家电小商城网站源码1.0
家电小商城网站源码1.0

家电公司网站源码是一个以米拓为核心进行开发的家电商城网站模板,程序采用metinfo5.3.9 UTF8进行编码,软件包含完整栏目与数据。安装方法:解压上传到空间,访问域名进行安装,安装好后,到后台-安全与效率-数据备份还原,恢复好数据后到设置-基本信息和外观-电脑把网站名称什么的改为自己的即可。默认后台账号:admin 密码:132456注意:如本地测试中127.0.0.1无法正常使用,请换成l

下载
  • 动态加载与卸载程序集:使用 AssemblyLoadContext(.NET Core+),支持 Unload();需手动管理上下文生命周期,避免内存泄漏
  • 沙箱/权限控制:改用操作系统级隔离(容器、进程)、代码签名 + 运行时策略,或最小权限原则设计 API 边界
  • 全局异常捕获:仍可用 AppDomain.CurrentDomain.UnhandledException —— 但注意:该事件在 .NET Core+ 中只是兼容保留,仅对主线程同步异常有效;推荐统一用 try/catch + TaskScheduler.UnobservedTaskException + Application.ThreadException(Windows Forms)组合覆盖

如果必须在 .NET Framework 中操作 AppDomain

仅限维护老项目,且明确运行于 full framework(如 Windows Server 2012 + .NET 4.8)。关键点:

  • 不要直接 new AppDomain,用 AppDomain.CreateDomain("name")
  • 跨域调用必须继承 MarshalByRefObject,否则会被序列化传值(导致类型加载失败或状态丢失)
  • 卸载前确保无引用残留(尤其事件订阅、线程、Timer),否则 AppDomain.Unload() 会阻塞甚至超时抛 CannotUnloadAppDomainException
  • AppDomainSetup.ApplicationBase 必须设为绝对路径,否则加载程序集易失败

示例片段(仅作对照,勿复制到新项目):

var setup = new AppDomainSetup { ApplicationBase = @"C:\MyPlugins" };
var domain = AppDomain.CreateDomain("PluginDomain", null, setup);
domain.DoCallBack(() => Console.WriteLine("Running in isolated domain"));
AppDomain.Unload(domain); // 可能卡住,务必检查引用

真正棘手的是卸载失败的排查——没有工具能自动追踪所有跨域引用,只能靠日志、弱引用检测和反复重启测试。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

633

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

633

2023.08.10

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1000

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1143

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

817

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

457

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2356

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

850

2023.08.10

包子漫画网页版入口与全集阅读指南_正版免费漫画快速访问方法
包子漫画网页版入口与全集阅读指南_正版免费漫画快速访问方法

本专题汇总了包子漫画官网和网页版入口,提供最新章节抢先看方法、正版免费阅读指南,以及稳定访问方式,帮助用户快速直达包子漫画页面,无广告畅享全集漫画内容。

1

2026.02.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 62.5万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号