填充警告信息

时间:2014-07-14 09:53:50

标签: c# visual-studio-2012 microsoft-fakes

我正在申请使用SHIMS。

所以你知道它会发出警告,例如"警告20无法生成一些假货。有关完整的详细信息,请将此文件中Fakes元素的Diagnostic属性设置为' true'并重建项目。"

正如警告中所述,我试图将Diagnostic标志设置为true。

按照规定,我得到了所有警告清单。

警告的数量是1933年来自" mscorlib.fakes"文件。

所以为了解决这个问题,我只是看看以下所有链接,看看它。

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 个答案:

答案 0 :(得分:10)

<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 :(得分:10)

当它产生一些额外警告时有两种解决方法,例如

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

你可能不喜欢,你可以通过不为fakes文件中的那些类型生成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>

然而,通过并删除每个有警告的类都会非常耗时,尤其是对于较大的BCL。

第二种方法,在我看来更好,就是使用'!'进行类型过滤并且只指定您有兴趣生成的类。 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。

答案 2 :(得分: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>

答案 3 :(得分:2)

最后使用了所有.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>

有多种方法可以删除所有不需要的存根和填充程序,您可以直接删除整个类或删除该类的部分部分。

因此,为了解决所有警告,你必须经历这一点。