Shims警告信息

14

我有一个小应用程序,其中我使用了SHIMS。

正如您所知,它会给出警告,例如"Warning 20 Some fakes could not be generated. For complete details, set Diagnostic attribute of the Fakes element in this file to 'true' and rebuild the project."

因此根据警告中所说的,我尝试将Diagnostic标志设置为true。

就像指定的那样,我得到了所有警告的列表。

警告数量为"mscorlib.fakes"文件中的1933个。

为了解决这个问题,我查看了以下链接,你也可以查看一下。

http://msdn.microsoft.com/en-us/library/hh708916.aspx#bkmk_type_filtering

vs 2012: Shims compile

Suppressing Microsoft Fakes warnings

http://connect.microsoft.com/VisualStudio/feedback/details/848682/microsoft-fakes-not-creating-properties-in-a-shim-of-a-class-with-auto-generated-properties

还有其他的一些东西。

但我仍然无法弄清楚如何解决所有这些警告。

我还想知道是否有任何方法可以抑制这些警告。

那么,如何以正确的方式删除所有这些警告?是否有其他方法可以抑制所有这些警告?

每当我添加时

<ShimGeneration>
    <Clear/>
    // other tags like add and etc..
<ShimGeneration/>

我在项目中遇到了很多错误,比如你缺少程序集引用等。

那么有什么方法可以清除所有这些警告和压制所有这些警告的方式吗?

4个回答

14

当出现额外警告时,有两种解决方法,例如:

Cannot generate shim for System.Diagnostics.ProcessPriorityClass: type is an enum.

你可能不喜欢这些警告,但可以通过在仿造文件中不为那些类型生成Shims来摆脱它们。类似于:

您可能不喜欢这些警告,但可以通过在模拟文件中不为这些类型生成Shims来消除它们。类似于:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic="true">
  <Assembly Name="System" Version="4.0.0.0"/>
  <StubGeneration>
    <Clear/>
  </StubGeneration>
  <ShimGeneration>
    <Clear/>
    <Add FullName="System.Diagnostics.Process"/>
    <Remove FullName="System.Diagnostics.ProcessPriorityClass"/>
    <Remove FullName="System.Diagnostics.ProcessWindowStyle"/>
  </ShimGeneration>
</Fakes>

然而,对于较大的BCLs,逐个删除每个带有警告的类可能会耗费时间。

第二种方法,也是我认为更好的方法,是使用类型筛选 '! ',并且仅指定您要生成的类。在MSDN上给出的示例似乎表明类型过滤只能用于限制命名空间属性,但也可以与fullname属性一起使用,就像这个示例:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic="true">
  <Assembly Name="System" Version="4.0.0.0"/>
  <StubGeneration>
    <Clear/>
  </StubGeneration>
  <ShimGeneration>
    <Clear/>
    <Add FullName="System.Diagnostics.Process!"/>
  </ShimGeneration>
</Fakes>

这个示例只会针对 System.Diagnostics.Process 类进行处理,而不匹配 System.Diagnostics.ProcessPriorityClass。


13
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic="true">
  <Assembly Name="mscorlib" Version="4.0.0.0"/>
  <StubGeneration>
    <Clear />
  </StubGeneration>
  <ShimGeneration>
    <Clear />
    <!-- Add or remove library or class --> 
  </ShimGeneration>
</Fakes>

1
将代码的第一行“Diagnostic =“ true””更改为“Diagnostic =“ false””,以避免警告消息。 - DanielV
1
MS Fakes简介:https://youtu.be/KKiG5NJkqXs 只需为每个警告添加<remove fullname="System.IO.File" />。 - Anton Lyhin

2

尝试以下代码:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
      <Assembly Name="mscorlib" />
      <!-- user code -->
      <StubGeneration>
        <Types>
          <Clear />
          <Add AbstractClasses="true"/>
        </Types>
      </StubGeneration>
      <!-- /user code -->
    </Fakes>

1

最终成功处理了所有的 .fakes 文件。

并再次使用以下链接。

http://msdn.microsoft.com/en-us/library/hh708916.aspx#bkmk_type_filtering

在上面指定的链接中,只说明了如何处理存根生成,而没有说明如何处理桨片生成。

我认为应该在那里给出完整的示例。

因此,为了消除上述链接中指定的所有警告,我只添加了必要的存根生成并删除了不必要的生成。

示例如下:

<StubGeneration>
    </Clear>
    <Add Namespace="System!">
    // Other code
</StubGeneration>
<ShimGeneration>
    <Remove Namespace="System" TypeName="example"/>
</ShimGeneration>

有不同的方法来删除所有不需要的 stub 和 shim,你可以直接删除整个类,也可以删除类的部分内容。

因此,为了避免所有警告,必须进行这一过程。


类型过滤不仅可以与命名空间一起使用,这样您就不必添加命名空间并删除不需要的类。 - Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接