发出警告信息

本文关键字:信息 警告 | 更新日期: 2023-09-27 18:12:41

我有一个使用SHIMS的小应用程序。

所以你知道它给出了警告,如"警告20一些假文件无法生成。要获得完整的详细信息,请将此文件中Fakes元素的Diagnostic属性设置为"true"并重新构建项目。"


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

来自"mscorlib"的警告数为1933。假货"文件。


为了解决这个问题,我查看了下面的链接。

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

vs 2012: Shims编译

打压微软虚假警告

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/>

我在项目中得到很多错误,就像你缺少汇编参考和其他。

那么清除所有这些警告和抑制所有这些警告的方法是什么呢?

发出警告信息

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

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。

<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>

试试下面的代码

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

最后处理了所有。fakes文件。

并再次使用以下链接。

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

在上面指定的链接中,只是指定了如何处理存根生成而不是shim生成。

我认为那边应该给出完整的例子。

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

示例如下

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

有不同的方法可以删除所有不需要的stub和shim,您可以直接删除整个类或删除部分类。

要避开所有警告你必须通过这个