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

Jac*_*hea 53 .net c# attributes compiler-warnings

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

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

Jor*_*dão 112

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

#pragma warning disable 612, 618
Run Code Online (Sandbox Code Playgroud)

然后重新启用警告:

#pragma warning restore 612, 618
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您不想在代码中添加"#pragma`s",可以查看下面的答案. (3认同)

Met*_*ght 57

如果你想避免使用#prgramas 代码,请尝试这样:
在你的csproj文件中,找到合适的PropertyGroup元素并添加

<WarningsNotAsErrors>612,618</WarningsNotAsErrors>
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

我已经成功地使用了VS2010,VS2012和VS2013项目.

  • 我不认为隐藏警告是OP的意图.毕竟,他们故意将"Obsolete"属性添加到他们自己的代码中.问题是他们还将**警告视为错误**,这会阻止他们构建他们的项目.我提出的解决方案允许他们保留`Obsolete`警告*并*构建他们的项目. (8认同)
  • 实际上,`<NoWarn />`块就是你要放的地方.在`<WarningsNotAsErrors />`块中指定此信息只会将错误降级为常规警告(您将<TreatWarningsAsErrors />`设置为true). (4认同)
  • @ vladimir77,再次,重点是不要压制警告.它是将它们作为警告,同时将所有其他警告视为错误. (3认同)

Mat*_*ttC 5

你能用一个#pragma合适的警告号码吗?

#pragma warning(C#参考)

编辑

发现这个但是有点晚C# - 有选择地压制自定义的过时警告