如何在与Knowntype属性一起使用的类上使用Obsolete属性时忽略编译器警告

时间:2011-03-11 15:46:19

标签: c# .net attributes compiler-warnings

所以我们试图弃用一些现有的类,并开始使用ObsoleteAttribute将它们标记为过时,因此它们将停止使用。使用具有使用Obsolete属性标记的类型的KnownType属性并导致编译器警告的事实是预期的。但是,在我们的项目中,我们将警告视为错误,因此忽略警告不是一种选择。是否有编译器指令来抑制此警告?

以下用法会导致编译器警告:

///ProductTemplateDataSet is marked with the Obsolete attribute
[KnownType(typeof(ProductTemplateDataSet))]
public class EntityCollectionBase : System.Data.DataSet
{

}

编辑:我理解使用编译器指令来忽略错误,但是这个编译器警告没有数字。

3 个答案:

答案 0 :(得分:109)

使用此选项可在违规行之前禁用相应的警告:

#pragma warning disable 612, 618

然后重新启用警告:

#pragma warning restore 612, 618

奇怪的是,有2个与此相关的警告:CS0612CS0618 - 一个用于[Obsolete],另一个用于[Obsolete("Message")]。去图......

答案 1 :(得分:55)

如果您想避免使用#prgrama s代码,请尝试以下操作:
在csproj文件中,找到相应的PropertyGroup元素并添加

<WarningsNotAsErrors>612,618</WarningsNotAsErrors>

这是我的一个项目文件的片段:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>TRACE;DEBUG</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <WarningsNotAsErrors>612,618</WarningsNotAsErrors>
    <NoWarn>
    </NoWarn>
    <WarningsAsErrors>
    </WarningsAsErrors>
</PropertyGroup>

我已成功使用VS2010,VS2012和VS2013项目。

答案 2 :(得分:5)

您是否可以使用#pragma列出相应的警告号码?

#pragma warning (C# Reference)

修改

找到了这个但是有点晚了C# - Selectively suppress custom Obsolete warnings