【问题标题】:How do microsoft fakes' shims actually work internally?microsoft fakes 的垫片实际上是如何在内部工作的?
【发布时间】:2014-10-06 13:21:55
【问题描述】:

所以我对它的实现方式很感兴趣。 基本上:我如何自己重新实现相同的东西? ...我不打算这样做。明白就好。

基本问题是: 怎么可能(?)拦截类实例化? 如何在一种情况下用一种实现替换它,而在另一种情况下用它的原始实现或什至不同的实现来替换它?

怎么可能拦截静态方法或密封类。

这都是关于垫片/痣的,而不是关于存根的。

【问题讨论】:

  • 微软使用最黑暗的魔法解决了这个问题。
  • 我不清楚“microsoft fakes' shims”这个问题是什么意思 - 你能澄清一下吗?
  • @Sander:Microsoft Fakes 是自 VS2012 以来包含的单元测试的质量工具。主要功能是垫片和存根。

标签: c# .net moles microsoft-fakes shim


【解决方案1】:

这是通过更改编译器发出的通用中间语言 (IL) 代码来完成的。您可以使用 Fody 库进行预打包的 IL 修改。 Fody 在内部使用 mono.cecil 库进行低级 IL 操作。编译器生成的 IL 被修改并作为程序集保存到磁盘。

我在Moles [pdf 文件] 上找到了此参考出版物。第 4 节解释了代码检测的机制。

【讨论】:

  • 你确定吗?填充方法比原始对象慢得多。
  • 在答案中提到的PDF中,我找到了以下核心解释:插桩操作如下。在每个方法的开头插入一些代码。此代码查询低级 detours 库是否有任何 detour 附加到此特定方法。如果是,则调用 detour 委托,否则,执行正常代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 2014-09-24
  • 2012-11-05
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多