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

Microsoft Fakes Shim构造函数失效问题求助

使用Microsoft Fakes Shim构造函数时非自定义属性抛出异常的问题

我尝试按照文档描述的方式Shim构造函数,以Uri类为例的示例代码如下:

using (ShimsContext.Create())
{
  ShimBehaviors.Current = ShimBehaviors.Fallthrough;
  System.Fakes.ShimUri.ConstructorString = (@this, s) =>
  {
    var shim = new ShimUri(@this)
    {
        AbsoluteUriGet = () => "http://test"
    };
  };

  var uri = new Uri("http://myhost:8100");
  Console.WriteLine(uri.Host);
}

运行上述代码时,生成的Uri实例中,除了被Shim的AbsoluteUri属性外,其他所有属性访问都会抛出InvalidOperationException,比如最后一行调用uri.Host就会触发该异常。调试时发现@this变量的所有属性也会抛出同样的异常。

我尝试通过ShimBehaviors.Current或Shim内部的InstanceBehavior设置ShimBehaviors.Fallthrough,但均无效果。

我的预期行为是:Shim后的Uri实例,除了自定义的AbsoluteUri返回指定值外,其他行为与正常实例完全一致。

在其他系统类上做相同尝试时,遇到类似问题,只是抛出的是NullReferenceException。

更新内容

后来找到一种可行的解决方法:在Shim构造函数委托内部,通过反射调用@this的构造函数完成正确初始化,并且必须在ShimContext.ExecuteWithoutShims下执行,否则会陷入无限递归。

我仍有疑问:为什么Shim构造函数委托总是获取到“损坏”的@this实例?这是我的使用方式有误,还是Microsoft Fakes的Bug?


内容的提问来源于stack exchange,提问作者Yevgeniy P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:13:18