How to ignore compiler warning when using Obsolete attribute on a class used with a KnownType attribute

C#.NetAttributesCompiler Warnings

C# Problem Overview


So we are trying to deprecate some of our existing classes, and have started marking them as obsolete with the ObsoleteAttribute so they will stop being used. The fact that using the KnownType attribute with a type that is marked with the Obsolete attribute and is causing a compiler warning is expected. However, in our project we have warnings treated as errors so ignoring the warning isn't an option. Is there a compiler directive to suppress this warning?

The following usage causes a compiler warning:

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

Edit: I understand using compiler directives to ignore errors, but this compiler warning doesn't have a number.

C# Solutions


Solution 1 - C#

Use this to disable the corresponding warnings just before the offending line:

#pragma warning disable 612, 618

And reenable the warnings after it:

#pragma warning restore 612, 618

Curiously enough, there're 2 warnings related to this: CS0612 and CS0618 - one is for [Obsolete] and the other for [Obsolete("Message")]. Go figure...

Solution 2 - C#

If you want to avoid having to pepper your code with #prgramas, try this:
In your csproj file, find the appropriate PropertyGroup element and add

<WarningsNotAsErrors>612,618</WarningsNotAsErrors>

here's a snippet from one of my project files:

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

I've used this successfully with VS2010, VS2012, and VS2013 projects.

Solution 3 - C#

Could you just use a #pragma listing the appropriate warning number?

#pragma warning (C# Reference)

EDIT

Found this but it's a bit late C# - Selectively suppress custom Obsolete warnings

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJace RheaView Question on Stackoverflow
Solution 1 - C#JordãoView Answer on Stackoverflow
Solution 2 - C#MetaFightView Answer on Stackoverflow
Solution 3 - C#MattCView Answer on Stackoverflow