相关疑难解决方法(0)

C# - 有选择地抑制自定义过时警告

我正在使用该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为我指明正确的方向!

c# visual-studio-2008

204
推荐指数
4
解决办法
7万
查看次数

警告错误 - 如何摆脱这些

我无法弄清楚如何摆脱基本上不应该停止我在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)

我看了菜单工具 …

visual-studio-2010 visual-studio

82
推荐指数
3
解决办法
9万
查看次数

如何在与Knowntype属性一起使用的类上使用Obsolete属性时忽略编译器警告

因此,我们尝试弃用一些现有的类,并开始使用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)

编辑:我理解使用编译器指令来忽略错误,但是这个编译器警告没有数字.

.net c# attributes compiler-warnings

53
推荐指数
3
解决办法
4万
查看次数

在C#中禁用OBSOLETE错误

我正在使用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指出的那样,这个值可以通过反射来设定.我想通过这个问题虽然我的猜测是,如果微软将属性设置为抛出异常,即使你通过反射设置它,我怀疑该值会被引用到任何地方.

c#

13
推荐指数
3
解决办法
1万
查看次数