从 AppDomain.AssemblyLoad 事件引发异常

2024-03-08

有人可以向我解释为什么我似乎无法从 AppDomain.Assembly 加载事件内部抛出异常吗?例如:

class Program
{
    static Program()
    {
        AppDomain.CurrentDomain.UnhandledException += (s, a) =>
        {
            Console.WriteLine("Caught exception!");
        };

        AppDomain.CurrentDomain.AssemblyLoad += (s, a) =>
        {
            Console.WriteLine(string.Format("Assembly {0} loaded", a.LoadedAssembly.FullName));

            throw new Exception();

            Console.WriteLine("Should never get here...");
        };
    }

    static void Main(string[] args)
    {
        Console.WriteLine(new ClassLibrary1.Class1().TestString());
        Console.WriteLine();
        Console.WriteLine("Done...");
        Console.ReadLine();
    }
}

当我执行此操作时,输出如下:

Assembly ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null loaded
TestString
Done...

谁能向我解释这种行为?谢谢。

EDIT澄清一些事情:

  • 当我期望它运行时,程序集加载事件运行良好。但我的例外永远不会被抛出

  • 这是从一个更大的应用程序中提取的示例。我想在加载程序集后检查它,如果我不喜欢它的某些内容,我想快速失败......但我的异常没有“发生”


发生这种情况是由于 JIT 编译器的工作方式造成的。它需要先生成 Main() 方法的代码,然后才能开始运行。由于您引用的是 ClassLibrary1.Class1() 类型,因此它需要加载该程序集以检索类型信息。这需要它加载程序集before你的代码开始运行。像这样更改它以获得异常:

using System.Runtime.CompilerServices;
...
    static void Main(string[] args) {
        Test();
    }
    [MethodImpl(MethodImplOptions.NoInlining)]
    static void Test() {
        Console.WriteLine(new ClassLibrary1.Class1().TestString());
        Console.WriteLine();
        Console.WriteLine("Done...");
        Console.ReadLine();
    }

现在,静态构造函数可以先运行并在加载 ClassLibrary1 程序集之前注册 AssemblyLoad 事件处理程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 AppDomain.AssemblyLoad 事件引发异常 的相关文章

  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • 从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

    我正在尝试将我的项目从 UseMVC asp net core 2 2 兼容样式 升级到 UseEndpoint Routing 并且我的所有请求都被重定向到我的验证失败页面 它与声明有关 如果我删除 Authorize Roles Adm
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 如何在c#中的内部类中访问外部类的变量[重复]

    这个问题在这里已经有答案了 我有两个类 我需要声明两个类共有的变量 如果是嵌套类 我需要访问内部类中的外部类变量 请给我一个更好的方法来在 C 中做到这一点 示例代码 Class A int a Class B Need to access
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • 将代码拆分为标头/源文件

    我从 Asio 的示例页面中获取了以下代码 class tcp connection public boost enable shared from this
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • 为什么拆箱枚举会产生奇怪的结果?

    考虑以下 Object box 5 int int int box int 5 int nullableInt box as int nullableInt 5 StringComparison enum StringComparison
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder

随机推荐

  • 切换到Android Studio 2.0后使用Dagger 2时出现NoClassDefFoundError

    在升级到 Android Studio 2 0 之前 我可以毫无问题地使用 Dagger 2 现在我得到了NoClassDefFoundError这让我停顿了一天多 我正在寻求帮助 看来 Gradle 不能我的AppModule类 尽管很明
  • 静态成员实例引用问题[重复]

    这个问题在这里已经有答案了 我在 Analytics 类中保存了以下静态方法 public static void buttonHit string eventName string eventAction string descripti
  • 使用 jquery 的 .validate 函数提交表单

    这是一个简单的问题 我有一个正在使用 jquery 的 validate 函数进行验证的表单 问题是 只有当我使用以下方式提交表单时 验证似乎才起作用
  • 如何在启动后将调试器附加到 iOS 应用程序?

    我正在解决一个问题 该问题很少发生 并且当我在 Xcode 下运行东西时似乎不会发生 是否可以正常运行应用程序 即从 Springboard 直到出现我的问题 然后在此时附加调试器 如果可能的话 我更愿意在不越狱的情况下执行此操作 连接已连
  • 为加密数据创建订单列

    我正在将加密数据保存到数据库中 有没有一种方法可以创建纯文本数据的 哈希码 或指纹或校验和 如果我对 哈希码 进行排序 排序 则顺序将与我保存纯文本数据并执行相同同样的sort order by操作可以吗 我基本上需要一个 SOUNDEX
  • Rails:我应该如何在控制器之间共享逻辑?

    这个问题肯定有人问过 但我找不到 我有一个UsersController and an Admin UsersController 显然 这些类中发生了很多事情 例如 strong parameters 创建 编辑用户后要遵循的路径 是相同
  • Rails rspec 设置子域

    我正在使用 rSpec 来测试我的应用程序 在我的应用程序控制器中 我有一个像这样的方法 def set current account current account Account find by subdomain request s
  • adwords api:检索每日支出(费用)

    有人有一些示例代码来说明如何获取 AdWords 帐户的每日总支出 所有广告系列 吗 我无法找到以简单的方式执行此类操作的示例代码 因此任何帮助 指针 代码将不胜感激 我将使用 python 库 但任何其他语言也很酷 提前致谢 Hoff 我
  • 无法在 Xcode 中找到设备支持文件[重复]

    这个问题在这里已经有答案了 在我的设备中运行我的应用程序时 我在 Xcode 中遇到以下错误 Xcode 版本为 10 01 我的设备 iOS 版本为 12 2 iPhone 5S 无法找到设备支持文件 您需要将 Xcode 更新到最新版本
  • 模块“rxjs”没有导出成员“firstValueFrom”

    App service 文件如下所示 import Injectable from nestjs common import HttpService from nestjs axios import Observable firstValu
  • 使用失败、回溯 Prolog 查找列表的最小值

    我想使用导致回溯的失败来计算列表的最小值 我如何改变分钟 分钟 X 分钟 以使其工作 min X A B X is the min of A B min X X Y X lt Y min Y X Y Y lt X member X X me
  • 使用隐藏代码在 WPF 中缩放画布

    这里的场景是 我有一张画布 上面画着不同的图表 现在的要求是使用 C 或 VB 使用背后的代码放大画布 此外 我需要将缩放代码放置在某个 dll 中 以便我可以在我的应用程序中重复使用同一组代码 现在我的问题是如何做到这一点 我已经尝试过以
  • 如何在 bootstrap4 中添加自定义断点以及如何在 scss 中使用响应式断点混合

    我正在开发一个 Angular 5 应用程序 它需要是一个响应式应用程序 我面临着使其响应的问题1366X768 and 1920X1080字体大小不同的分辨率 问题一 我在 style scss 中覆盖了断点 如下所示 grid brea
  • 从 C 函数返回数组

    我编写了一个返回数组的函数 虽然我知道我应该返回一个动态分配的指针 但我仍然想知道当我返回在函数内部本地声明的数组 不将其声明为静态 时会发生什么 当我注意到函数中内部数组的内存没有被释放时 我感到很惊讶 并且我将数组返回到主函数 主要的
  • Linux Azure Web 应用上的 Puppeteer

    我正在尝试在 Linux Azure Web Apps 上运行 Puppeteer 但日志显示 node modules puppeteer local chromium linux 782078 chrome linux chrome 加
  • Rails:每个http请求都会创建一个新的连接池吗?

    我正在读这篇文章https polycrystal org posts 2012 05 25 active record connection pool fairness html https polycrystal org posts 2
  • <应用程序名称>.pch 文件使用情况

    pch文件的重要性是什么以及 ifdef的意义是什么OBJC 另外 我们在哪里定义像 ifdef IS Production 这样的参数 这些参数在 pch 文件中检查 pch 文件允许您避免导入 UIKit h 和 Foundation
  • 在 Swing 中显示动画 BG

    动画 循环 GIF 可以显示在JLabel或者在 HTML 中 在格式化文本组件中 例如JEditorPane 并被视为循环 但是要加载图像以绘制为容器的背景 我通常会使用ImageIO read or Toolkit getImage 后
  • 转义动态sqlite查询?

    我目前正在根据用户的输入构建 SQL 查询 可以在此处查看如何完成此操作的示例 def generate conditions table name nameValues sql u for field in nameValues sql
  • 从 AppDomain.AssemblyLoad 事件引发异常

    有人可以向我解释为什么我似乎无法从 AppDomain Assembly 加载事件内部抛出异常吗 例如 class Program static Program AppDomain CurrentDomain UnhandledExcept