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

VS2017中添加System假程序集后无ShimDirectory等Shim类的问题求助

解决VS2017中Fakes未生成ShimDirectory的问题

我之前也碰到过类似的糟心事,下面几个实操思路应该能帮你搞定这个问题:

1. 手动修改System.fakes配置文件

默认的Fakes生成规则可能只包含了少量基础类型,你需要明确指定要生成System.IO.Directory的Shim类。打开测试项目Fakes文件夹下的System.fakes文件,替换成以下配置:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
  <Assembly Name="System" Version="4.0.0.0"/>
  <ShimGeneration>
    <Add FullName="System.IO.Directory"/>
    <!-- 如果还需要其他IO类的Shim,比如File、Path,也可以在这里一起添加 -->
  </ShimGeneration>
</Fakes>

修改完成后,右键点击测试项目里的Fakes文件夹,选择「生成」,重新生成假程序集。

2. 确认项目目标框架版本

VS2017的Fakes对不同.NET框架版本的支持有差异,务必保证你的测试项目和被测试项目目标框架一致,建议用.NET Framework 4.6.1及以上版本(太老的框架版本Shim生成支持不全)。你可以右键项目→「属性」→「应用程序」里查看和调整目标框架。

3. 清理缓存后重建解决方案

有时候项目缓存会干扰假程序集的生成,试试这套操作:

  • 右键解决方案→「清理解决方案」
  • 手动删除测试项目下的bin和obj文件夹
  • 右键测试项目→「重新生成」
  • 如果还是不行,先移除已有的假程序集,再重新添加一次

4. 检查Fakes工具的安装状态

注意:Fakes是VS Enterprise版本专属功能,Community和Professional版没有这个特性。如果你用的是Enterprise版,还要确认安装时勾选了「开发工具」下的「单元测试工具」相关组件。没装的话,打开VS安装程序→「修改」→勾选对应组件后重新安装。

5. 临时生成全量IO Shim排查问题

如果上面的方法都没效果,可以先让Fakes生成System.IO命名空间下所有类型的Shim,排查是不是特定类型的生成问题:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
  <Assembly Name="System" Version="4.0.0.0"/>
  <ShimGeneration>
    <Clear/>
    <Add FullName="System.IO.*"/>
  </ShimGeneration>
</Fakes>

要是这样能生成ShimDirectory,再把配置缩小到你需要的具体类型即可。

内容的提问来源于stack exchange,提问作者Jasper Kent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:38:56