在C#中禁用OBSOLETE错误
我正在使用Microsoft TFS API,其中一个接口上的某个属性已标记为已过时,它指示我使用其他属性。 不幸的是,API要我使用的属性由TFS2010而不是TFS2008使用。
我试过这样做:
#pragma warning disable 0612, 0618 request.CommandLineArguments = arguments; #pragma warning restore 0612, 0618
但我仍然得到CommandLineArguments已经过时的错误。 反正有压制这个吗?
编辑
不幸的是,这并没有显示为“警告为错误”,实际上在我的项目中关闭了警告的错误。 以下是违规代码的屏幕上限以及错误列表
编辑2:
使用ILSpy后,CommandLineArguments属性在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 { get; set; }
不幸的是,我认为没有办法告诉编译器忽略Obsolete属性导致的错误。
编辑3正如@Peter Ritchie指出的那样,这个值可以通过reflection来设定。 我想通过这个问题虽然我的猜测是,如果微软将属性设置为抛出exception,即使你通过reflection设置它,我怀疑该值会被引用到任何地方。
以下为我工作:
#pragma warning disable 612,618 request.CommandLineArguments = arguments; #pragma warning restore 612,618
注意数字中没有前导0
编辑:好的,你的程序集在ObsoleteAttribute构造函数中有“true”参数。 这意味着您无法使用该属性而不会出现错误。
如果您无法重新编写代码以避免使用此属性,则必须通过reflection调用属性setter,例如:
request.GetType().GetProperty("Number").SetValue(request, arguments, null);
和获得是相似的:
(string)request.GetType()。GetProperty(“CommandLineArguments”)。GetValue(request,null);
Visual Studio 2015
由于[已废弃]而构建失败?
仅当启用“将警告视为错误”并且存在具有[已废弃]属性的方法时,才会出现这种情况。
方法1:将错误降级为警告
在.csproj
文件中添加
(对所有部分重复):
true 4 612,618 true full false bin\Debug\ DEBUG;TRACE prompt
如果处理许多.csproj files
,请参阅Appendix A: Notepad++ for search and replace
。
方法2:忽略文件中的错误
注意:建议不要使用此方法,因为它会隐藏标记为[已废弃]的方法的警告。 我们仍然希望看到所有对过时方法的调用列表,以便我们可以升级它们。
使用#pragma warning disable 612,618
方法3:忽略项目中的错误
注意:建议不要使用此方法,因为它会隐藏标记为[已废弃]的方法的警告。 我们仍然希望看到所有对过时方法的调用列表,以便我们可以升级它们。
编辑项目(对所有部分重复):
方法4:忽略项目中的错误
注意:建议不要使用此方法,因为它会隐藏标记为[已废弃]的方法的警告。 我们仍然希望看到所有对过时方法的调用列表,以便我们可以升级它们。
手动编辑.csproj以禁用特定错误的警告。 添加标签
(对所有部分重复):
612,618 true bin\x64\Debug\ DEBUG;TRACE true full x64 prompt
附录A:用于搜索和替换的Notepad ++
有很多文件? 没问题!
在NotePad ++中打开所有.csproj
文件,然后:
- 查找:
true - 替换:
true \n\t612,618
以防万一其他人偶然发现这件事。
如果标记将属性设置为Obsolete的方法,并且DONT将其标记为true,则编译器会忽略内部错误而抛出更高级别的警告,而您可以忽略该警告。
IE
[Obsolete("Cause it aint",false)] public void Foo() { request.CommandLineArguments = arguments; }