abszero abszero - 9 months ago 73
C# Question

Disabling OBSOLETE error in C#

I am using the Microsoft TFS API and one of the properties on one of the interfaces has been marked as Obsolete and it instructs me to use a different property. Unfortunately the property the API wants me to use is used by TFS2010 and not TFS2008.

I have tried doing this:

#pragma warning disable 0612, 0618
request.CommandLineArguments = arguments;
#pragma warning restore 0612, 0618

But I still get the error that CommandLineArguments is obsolete. Is there anyway to suppress this?


Unfortunately this is not showing up as a 'Warning as Error', in fact Treat Warning's As Error's is turned off in my project. Here is a screen cap of the offending code as well as the error list

enter image description here


After using ILSpy the CommandLineArguments property looks like this in the TFS2010 API:

[Obsolete("This property has been deprecated. Please remove all references. To pass command line arguments to MSBuild.exe, set the ProcessParameters property.", true)]
string CommandLineArguments

Unfortunately I don't think there is a way to tell the compiler to ignore the error that the Obsolete attribute is causing.

As @Peter Ritchie points out this value could be set via reflection. As I thought through this problem though my guess is that if Microsoft set the property to throw an exception even if you did set it via reflection I doubt that the value would be referenced anywhere.

Answer Source

Following works for me:

#pragma warning disable 612,618
            request.CommandLineArguments = arguments;
#pragma warning restore 612,618

notice no leading 0 in the numbers

EDIT: Okay, your assembly has the "true" argument in the ObsoleteAttribute constructor. This means you can't use the property and not get an error.

If you can't re-write your code to avoid using this property, you'll have to invoke the property setter via reflection, for example:

request.GetType().GetProperty("Number").SetValue(request, arguments, null);

and getting is similar:

(string)request.GetType().GetProperty("CommandLineArguments").GetValue(request, null);