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
相关产品推荐
相关产品推荐

