MSFakes 命名约定以匹配通用 class?

MSFakes Naming Convention to match Generic class?

我有一个名为 MyClass 的 class 和一个名为 MyClass<C> 的通用版本。使用假货,我想生成 JUST MyClass<C> 而不是 MyClass 的垫片。我最初尝试过:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
  <Assembly Name="XXXX" Version="#.##.###"/>
  <ShimGeneration>
    <Clear/>
    <Add FullName="MyClass!"/>
  </ShimGeneration>
</Fakes>

这为 MyClass 而不是 MyClass<C> 生成了垫片。如果我改变!对于 *,它确实匹配 MyClass<C>。这让我相信我需要使用一些命名约定来匹配 MyClass<C>。有谁知道is/where我能找到什么?

您在类型上使用重音符加上泛型类型参数的数量。例如:MyClass<T> 将是 1,MyClass<T,U> 将是 2,等等。另请参阅 CLI specification 第 10.7.2 节类型名称和元数编码 .

您还应该将您的命名空间添加为值的一部分。

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
  <Assembly Name="XXXX" Version="#.##.###"/>
  <ShimGeneration>
    <Clear/>
    <Add FullName="MyNamespace.MyClass`1!"/>
  </ShimGeneration>
</Fakes>