Отключение ошибки 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;
}