Microsoft Fakes无法找到`ICollection`和`IDictionary`接口

时间:2016-01-01 16:59:43

标签: c# .net unit-testing microsoft-fakes

MS Visual Studio 2015 Enterprise。

我正在学习 Microsoft Fakes Framework 。我有两个程序集AcDbMng.dllAcMng.dll由其他公司(Autodesk)编写。他们使用.Net Framework 2.0。我创建了新的单元测试项目,将这些程序集添加到我的项目中,并通过其上下文菜单调用“ Add Fakes Assembly ”。现在我启动我的项目构建并获得128个错误...例如:

  

找不到名称空间的类型或名称是不成功的   “ICollection”(也许,没有使用或装配的指令   参考)。 [c:\ users \ andrey \ documents \ visual studio   2015 \ Projects \ msfakes \ obj \ Debug \ Fakes \ adm \ f.csproj] msfakes   c:\ users \ andrey \ documents \ visual studio 2015 \ Projects \ msfakes \ f.cs   206092

     

找不到名称空间的类型或名称是不成功的   “IDictionary”(也许,没有使用或装配的指令   参考)。 [c:\ users \ andrey \ documents \ visual studio   2015 \ Projects \ msfakes \ obj \ Debug \ Fakes \ adm \ f.csproj] msfakes   c:\ users \ andrey \ documents \ visual studio 2015 \ Projects \ msfakes \ f.cs   206119

     

修饰符“override”对此项目无效。 [c:\ users \   andrey \ documents \ visual studio 2015 \ Projects \ msfakes \ obj \   Debug \ Fakes \ adm \ f.csproj] msfakes c:\ users \ andrey \   documents \ visual studio 2015 \ Projects \ msfakes \ f。 cs 206119

此类错误消息对我来说并不清楚。我试图更改目标.Net Framework平台:.Net 4.6和.Net 3.5,但我得到相同的消息。

ICollectionIDictionary,修饰符“override”...我不明白,它们与这些程序集有什么关系,因为它们是在平台程序集中定义的,而不是AcDbMng.dllAcMng.dll

有人知道这种行为吗?

UPD

也许Autodesk使用具有相同名称的自己的接口,我将使用?

Microsoft Fakes Framework 添加一些AutoCAD的其他程序集?

如果我仅为AcMng.dll生成假货,那么我没有错误。但如果我也为AcDbMng.dll生成了假货,那么我就会遇到这些问题。此外,在解决方案资源管理器的情况下,我看到AcMgd.17.2.0.0.Fakes已出现,但我看不到像AcDbMgd.17.2.0.0.Fakes这样的内容:

enter image description here

UPD2

可以从here下载AcDbMgd.dll文件。

UPD3

主题已关闭。有关fakes - 格式的更详细信息为here

1 个答案:

答案 0 :(得分:0)

您可以尝试使用类似

的内容编辑AcDbMgd.fakesAcMgd.fakes文件
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
  <Assembly Name="AcDbMgd" Version="..."/>
  <StubGeneration>
    <Clear/>
  </StubGeneration>
  <ShimGeneration>
    <Clear/>
    <Add FullName="your class of concern"/>
  </ShimGeneration>
</Fakes>

您正在限制生成的类并明确决定哪些类执行。当我遇到像你一样的问题时,如果我限制生成的类,我会好运。如果不能自己重新创建它,很难给出更具体的答案。