Отключение ошибки OBSOLETE в С#

Я использую API Microsoft TFS, и одно из свойств на одном из интерфейсов было помечено как "Устаревшее", и оно дает мне указание использовать другое свойство. К сожалению, свойство, которое API хочет использовать, используется TFS2010, а не TFS2008.

Я попытался сделать это:

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

Но я все еще получаю сообщение об ошибке, которое CommandLineArguments устарело. Есть ли способ подавить это?

ИЗМЕНИТЬ

К сожалению, это не отображается как "Предупреждение как ошибка", на самом деле "Предупреждение об отключении" в моем проекте отключено. Вот экранная панель кода, а также список ошибок

enter image description here

ИЗМЕНИТЬ 2:

После использования ILSpy свойство CommandLineArguments выглядит так в API TFS2010:

    [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
    {
        get;
        set;
    }

К сожалению, я не думаю, что есть способ сообщить компилятору игнорировать ошибку, вызываемую атрибутом Obsolete.

ИЗМЕНИТЬ 3 Поскольку @Peter Ritchie указывает, что это значение может быть установлено через отражение. Поскольку я думал об этой проблеме, хотя я предполагаю, что если Microsoft установит свойство, чтобы выбросить исключение, даже если вы установили его через отражение, я сомневаюсь, что значение будет ссылаться где угодно.

Ответ 1

Следующие работы для меня:

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

не заметите, что число 0 в числах

EDIT: Хорошо, ваша сборка имеет "истинный" аргумент в конструкторе ObsoleteAttribute. Это означает, что вы не можете использовать свойство и не получать сообщение об ошибке.

Если вы не можете повторно написать свой код, чтобы избежать использования этого свойства, вам нужно будет вызвать средство настройки свойств через отражение, например:

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

и получение похоже:

(string) request.GetType(). GetProperty ( "CommandLineArguments" ). GetValue (запрос, null);

Ответ 2

Visual Studio 2015

Сбой сборки из-за [Устаревшего]?

Это произойдет только в том случае, если включена опция "Обработать предупреждения как ошибки", и существует метод с атрибутом [Устаревший].

Способ 1: Ошибка понижения до предупреждения

Добавьте <WarningsNotAsErrors>612,618</WarningsNotAsErrors> в файл .csproj (повторите для всех разделов):

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

Если вы имеете дело со многими .csproj files, см. Appendix A: Notepad++ for search and replace.

Способ 2: Игнорировать ошибку в файле

Примечание. Этот метод рекомендуется не, поскольку он скрывает предупреждения для методов, отмеченных [Устаревшие]. Мы по-прежнему хотим видеть список все вызовы устаревших методов, чтобы мы могли их обновить.

Используйте #pragma warning disable 612,618

Метод 3: Игнорировать ошибку в проекте

Примечание. Этот метод рекомендуется не, поскольку он скрывает предупреждения для методов, отмеченных [Устаревшие]. Мы по-прежнему хотим видеть список все вызовы устаревших методов, чтобы мы могли их обновить.

Отредактируйте проект (повторите для всех разделов):

введите описание изображения здесь

Способ 4. Игнорировать ошибку в проекте

Примечание. Этот метод рекомендуется не, поскольку он скрывает предупреждения для методов, отмеченных [Устаревшие]. Мы по-прежнему хотим видеть список все вызовы устаревших методов, чтобы мы могли их обновить.

Вручную отредактируйте свой .csproj, чтобы отключить предупреждения для определенных ошибок. Добавьте тег <NoWarn>612,618</NoWarn> (повторите для всех разделов):

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

Приложение A: Блокнот ++ для поиска и замены

У вас много файлов? Нет проблем!

Откройте все файлы .csproj в NotePad ++, затем:

  • Найти: <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
  • Заменить: <TreatWarningsAsErrors>true</TreatWarningsAsErrors>\n\t<WarningsNotAsErrors>612,618</WarningsNotAsErrors>

введите описание изображения здесь

Ответ 3

На всякий случай кто-то наткнется на это.

Если вы помечаете метод, в котором вы устанавливаете свойство как "Устаревшее", а DONT отмечаете его как истину, компилятор игнорирует внутреннюю ошибку, бросая ваше предупреждение более высокого уровня, которое вы можете игнорировать.

IE

[Obsolete("Cause it aint",false)]
public void Foo()
{
     request.CommandLineArguments = arguments;
}