Disabling OBSOLETE error in C#

前端 未结 3 578
半阙折子戏
半阙折子戏 2020-12-03 21:22

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

相关标签:
3条回答
  • 2020-12-03 21:46

    Just in case anyone else stumbles on this.

    If you mark the method in which you set the property as Obsolete and DONT mark it as true the compiler will ignore the interior error throwing your higher level warning instead which you can ignore.

    IE

    [Obsolete("Cause it aint",false)]
    public void Foo(object arguments)
    {
         request.CommandLineArguments = arguments;
    } 
    
    0 讨论(0)
  • 2020-12-03 21:47

    Visual Studio 2015

    Build failing due to [Obsolete]?

    This would only occur if "Treat Warnings As Errors" is enabled, and there is a method with the [Obsolete] attribute.

    Method 1: Downgrade error to warning

    Add <WarningsNotAsErrors>612,618</WarningsNotAsErrors> in the .csproj file (repeat for all sections):

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

    If dealing with many .csproj files, see Appendix A: Notepad++ for search and replace.

    Method 2: Ignore error in file

    Note: This method is not recommended, because it hides the warnings for methods marked [Obsolete]. We still want to see a list of all calls to obsolete methods so we can upgrade them.

    Use #pragma warning disable 612,618

    Method 3: Ignore error in project

    Note: This method is not recommended, because it hides the warnings for methods marked [Obsolete]. We still want to see a list of all calls to obsolete methods so we can upgrade them.

    Edit the project (repeat for all sections):

    Method 4: Ignore error in project

    Note: This method is not recommended, because it hides the warnings for methods marked [Obsolete]. We still want to see a list of all calls to obsolete methods so we can upgrade them.

    Manually edit your .csproj to disable warnings for specific errors. Add the tag <NoWarn>612,618</NoWarn> (repeat for all sections):

    <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
        <NoWarn>612,618</NoWarn>
        <DebugSymbols>true</DebugSymbols>
        <OutputPath>bin\x64\Debug\</OutputPath>
        <DefineConstants>DEBUG;TRACE</DefineConstants>
        <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
        <DebugType>full</DebugType>
        <PlatformTarget>x64</PlatformTarget>
        <ErrorReport>prompt</ErrorReport>        
    </PropertyGroup>
    

    Appendix A: Notepad++ for search and replace

    Have a lot of files? No problem!

    Open all .csproj files in NotePad++, then:

    • Find: <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    • Replace: <TreatWarningsAsErrors>true</TreatWarningsAsErrors>\n\t<WarningsNotAsErrors>612,618</WarningsNotAsErrors>

    0 讨论(0)
  • 2020-12-03 21:49

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

    0 讨论(0)
提交回复
热议问题