我正在使用该Obsolete属性(正如其他程序员建议的那样)在使用某种方法时显示警告.
有没有办法SuppressMessage在使用合理的地方抑制类似于CodeAnalysis的警告?
谢谢!
编辑
这是[Obsolete("Some message")]因为我需要包含有关警告的一些细节.但是,#pragma warning disable 612一旦我将消息添加到裸[Obsolete]属性,它就不再起作用了......
编辑2
找到正确的警告编号 - 如果您在过时属性后面有消息,则为618.
所以要做我想做的事:
#pragma warning disable 618
然后打电话
#pragma warning restore 618
感谢Jared Par和Jon Skeet为我指明正确的方向!
我无法弄清楚如何摆脱基本上不应该停止我在Visual Studio 2010中编译的错误,并且不应该是show stoppers,或者至少我稍后会修复它们,但我不希望编译只是错误和停止这些问题.
例如,我收到以下错误:
错误1警告错误:'ScrewTurn.Wiki.SearchEngine.Relevance.Finalize(float)'上的XML注释具有'IsFinalized'的paramref标记,但没有该名称的参数C:\ www\Wiki\Screwturn3_0_2_509\SearchEngine\Relevance.cs 60 70 SearchEngine
对于此代码:
/// <summary>
/// Normalizes the relevance after finalization.
/// </summary>
/// <param name="factor">The normalization factor.</param>
/// <exception cref="InvalidOperationException">If <paramref name="IsFinalized"/> is <c>false</c> (<see cref="M:Finalize"/> was not called).</exception>
public void NormalizeAfterFinalization(float factor) {
if (factor < 0)
throw new ArgumentOutOfRangeException("factor", "Factor must be greater than or equal to zero");
if (!isFinalized)
throw new InvalidOperationException("Normalization can be performed only after finalization");
value = value * factor;
}
Run Code Online (Sandbox Code Playgroud)
我看了菜单工具 …
因此,我们尝试弃用一些现有的类,并开始使用ObsoleteAttribute将它们标记为过时,以便它们将停止使用.使用具有使用Obsolete属性标记的类型的KnownType属性并导致编译器警告的事实是预期的.但是,在我们的项目中,我们将警告视为错误,因此忽略警告不是一种选择.是否有编译器指令来抑制此警告?
以下用法会导致编译器警告:
///ProductTemplateDataSet is marked with the Obsolete attribute
[KnownType(typeof(ProductTemplateDataSet))]
public class EntityCollectionBase : System.Data.DataSet
{
}
Run Code Online (Sandbox Code Playgroud)
编辑:我理解使用编译器指令来忽略错误,但是这个编译器警告没有数字.
我正在使用Microsoft TFS API,其中一个接口上的某个属性已标记为已过时,它指示我使用其他属性.不幸的是,API要我使用的属性由TFS2010而不是TFS2008使用.
我试过这样做:
#pragma warning disable 0612, 0618
request.CommandLineArguments = arguments;
#pragma warning restore 0612, 0618
Run Code Online (Sandbox Code Playgroud)
但我仍然得到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;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我认为没有办法告诉编译器忽略Obsolete属性导致的错误.
编辑3正如@Peter Ritchie指出的那样,这个值可以通过反射来设定.我想通过这个问题虽然我的猜测是,如果微软将属性设置为抛出异常,即使你通过反射设置它,我怀疑该值会被引用到任何地方.