标签: fxcop

CA1726:FxCop禁止的词:标志

有人希望我让其他人的代码符合某些FxCop规则集,其中包括规则CA1726:使用首选术语.大多数术语/替换都是正确的,我可以理解,人们必须决定用一种方法来命名.

但是,"旗帜"一词的处理方式是什么?任何人都可以向我解释为什么我不会使用这个名字?(在我去老板之前抱怨它之前;))

比如,我有一个数据对象,它有一个类'flags'的成员,它捆绑了大量定义如何处理数据对象的属性.你怎么称呼这个?

c# fxcop coding-style rules

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

CA2007 与 .NET Core 应用程序相关吗?

当我在我的项目上运行 FxCop 时,我收到了大量 ID 为 CA2007 的警告。文档中缺少此 ID (它只是从 CA2006 跳到 CA2100),但我得到的消息是:

不要在不调用 ConfigureAwait 的情况下直接等待任务

我的印象是 .NET Core 没有使用同步上下文,这意味着我不需要使用.ConfigureAwait(bool). 但是,当我尝试使用 Google 搜索它时,我现在只能找到对 ASP.NET Core 的提及(例如这篇博文)。

鉴于我找不到任何权威的东西,我开始怀疑我是否将 ASP.NET Core 更改误认为是更普遍适用于所有 .NET Core 的更改。

谁能给我一个明确的答案?

我是否需要通过我的应用程序并应用大量的ConfigureAwait? 或者我应该在我的 FxCop 规则集中禁用 CA2007?

c# asynchronous fxcop .net-core

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

如何正确实现配置模式(CA1063)

框架设计指南(第2版,第327页)说:

CONSIDER提供方法Close(),除了Dispose(),如果close是该区域的标准术语.

这样做时,重要的是使Close实现相同DisposeIDisposable.Dispose明确地考虑实现方法.

所以,按照提供的例子,我有这个类:

public class SomeClass : IDisposable {
    private SomeDisposable someInnerDisposable;

    public void Open() {
        this.someInnerDisposable = new SomeDisposable();
    }

    void IDisposable.Dispose() {
        this.Close();
    }

    public void Close() {
        this.Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing) {
        if (disposing) {
            this.someInnerDisposable.Dispose();
            this.someInnerDisposable = null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

FxCop似乎不喜欢这样:

CA1816:Microsoft.Usage:'SomeClass.Close()'调用'GC.SuppressFinalize(object)',这种方法通常仅在'IDisposable.Dispose'的实现中调用.有关更多信息,请参阅IDisposable模式.

CA1816:Microsoft.Usage:更改'SomeClass.IDisposable.Dispose()'以调用'GC.SuppressFinalize(object)'.这将防止对象一旦被处理并且已经超出范围而不必要地完成对象.

CA1063:Microsoft.Design:修改'SomeClass.IDisposable.Dispose()'以便它调用Dispose(true),然后在当前对象实例上调用GC.SuppressFinalize(在Visual Basic中为'this'或'Me'),然后回报.

CA1063:Microsoft.Design:将'SomeClass.IDisposable.Dispose()'重命名为'Dispose'并确保将其声明为public和sealed.

  • 如何正确地使用close方法实现dispose模式?

-要么-

  • 如何抑制警告?

我试过了

[SuppressMessage("Microsoft.Design", "CA1063:ImplementIDisposableCorrectly",
    Justification = "Framework Design Guidelines say it's ok.")]
void IDisposable.Dispose() …
Run Code Online (Sandbox Code Playgroud)

c# fxcop

12
推荐指数
1
解决办法
6684
查看次数

Delphi的FxCop/StyleCop?

有没有人知道相当于Delphi的FxCop/StyleCop?我真的希望将样式等自动检查到持续集成中.

delphi fxcop stylecop

12
推荐指数
2
解决办法
1801
查看次数

不要声明只读可变引用类型 - 为什么不呢?

我一直在阅读这个问题和其他一些答案,虽然我在更改引用和更改当前实例的状态之间有所区别,但我不确定为什么这意味着我不应该只读它.这是因为标记某些东西只是告诉编译器有关该实例的特殊内容,所以它能够将它当作线程安全处理时实际上可能不是吗?

据推测,有些情况下我不希望实例能够被更改,但是不介意实例的状态是否改变(单例可能./ me准备火焰)标记实例的后果是什么readonly如果我想要这个?

c# fxcop readonly immutability

12
推荐指数
3
解决办法
2294
查看次数

我们应该在成熟的项目中开始使用FxCop和/或StyleCop吗?

我们有3年的解决方案(.sln),大约有20个项目(.csproj).开始使用FxCop和/或StyleCop是否合理?也许我们应该首先将它用于几个小项目但不是整个解决方案?

看到一些经验丰富的答案会很高兴.

谢谢.

编辑:我们正在使用TeamCity进行持续集成.我们没有可能使用ReSharper.:(仅限CodeRushXpress.

.net c# fxcop

12
推荐指数
1
解决办法
2483
查看次数

获取FxCop来抑制整个类型的警告?

如何抑制整个类型的FxCop警告?

namespace ConsoleApplication1
{     
    public static class Serializer<T>
    {
        public static string Serialize(T obj)
        {
            return string.Empty;
        }

        public static T Deserialize(string str)
        {
            return default(T);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我尝试过这个,但它对我不起作用:

[assembly: SuppressMessage("Microsoft.Design",
    "CA1000:DoNotDeclareStaticMembersOnGenericTypes", Scope = "Type",
    Target = "ConsoleApplication1.Serializer'1")]
Run Code Online (Sandbox Code Playgroud)

.net c# code-analysis fxcop suppressmessage

11
推荐指数
1
解决办法
4002
查看次数

StyleCop/FxCop 10 - 如何仅在命名空间级别上正确抑制消息?

FxCop 10抱怨以下内容:

using XYZ.Blah; //CA1709 - "XYZ"
using Xyz.Blah; //No complaint.

using XylophoneSuperDuperLongFullName.Blah; //I don't want to have a long full name for my company name.
Run Code Online (Sandbox Code Playgroud)

问题是......我希望我的公司名称显示在所有大写字母中,因为XYZ是缩写.该名称的长版本太长,无法成为有用的命名空间.微软逃脱了这种东西,因为他们的首字母缩写只有两个字母.

using MS.Something; //No Complaint.
using Microsoft.SomethingElse; //No Complaint.
Run Code Online (Sandbox Code Playgroud)

所以,我正在考虑添加一个SuppressMessageAttribute来抑制此警告.但是,我不确定如何恰当地这样做(或者甚至在哪里坚持它),以便它只影响这一个实例.我不想在该命名空间中抑制任何内容,因为我想抓住我犯的任何其他错误.我确实看过msdn和谷歌搜索但我找不到任何显示如何专门针对这个实例.我发现最接近的是Scope ="namespace",但我不确定这是否意味着它会影响实际的命名空间名称,或者它是否会影响该命名空间中的所有内容.

c# fxcop namespaces stylecop suppressmessage

11
推荐指数
2
解决办法
2万
查看次数

FxCop文件夹丢失

有什么问题?我正在尝试安装FxCop 10.要安装它,需要Microsoft Windows SDK 7.1.我安装了SDK.现在,要安装FxCop,我必须运行FxCopSetup.exe,它应该位于%ProgramFiles%\ Microsoft SDKs\Windows\v7.1\Bin\FxCop文件夹中.但是,该文件夹丢失了.

我做了什么来试图解决它?我搜索了网络以解决问题,我尝试了一些在几个讨论中提出的解决方法,包括(1)没有完全安装SDK和(2)卸载SDK,重启,重新安装SDK并重新启动.

任何帮助是极大的赞赏.谢谢!

顺便说一句,我正在运行Windows 7(如果这是相关的).

fxcop

11
推荐指数
1
解决办法
3361
查看次数

CA1704 - 微软似乎阻止了"Multi"这个词?

public class MultiSomething { } //CA1704:IdentifiersShouldBeSpelledCorrectly
Run Code Online (Sandbox Code Playgroud)

当我运行代码分析时,我收到一个错误,因为Microsoft不识别"Multi"这个词(他们使用它的数字IMultiValueConverter).因此,我所做的是更正CodeAnalysisDictionary.xml文件,并按照此处提供的步骤操作.但是,它似乎没有解决问题,我仍然收到代码分析警告消息.

为了确保这不是识别的单词部分的错误,我添加了另一个类和另一个异常.

public class MultiSomething { } //CA1704:IdentifiersShouldBeSpelledCorrectly
public class MutiiSomething { } //NO WARNING

<Dictionary>
  <Words>
    <Recognized>
      <Word>Multi</Word> <-- This seems to not do anything... -->
      <Word>Mutii</Word> <-- This actually does something... -->
    </Recognized>
  </Words>
</Dictionary>
Run Code Online (Sandbox Code Playgroud)

修复它的另一种方法是使用SuppressMessage,虽然如果我打算在整个地方使用这个词,这不是一个很好的解决方案.

[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Multi")]
public class MultiSomething { } //NO WARNING (Suppressed)
Run Code Online (Sandbox Code Playgroud)

微软是否真的阻止'Multi'被添加到已识别的单词中?

.net code-analysis fxcop casing ca1704

11
推荐指数
2
解决办法
3299
查看次数