- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
请澄清一下,Code Contracts 是否类似于 FxCop 和 StyleCop?根据在线引用,我们需要在现有代码的函数中添加用于实现代码契约条件的代码。
public void Initialize(string name, int id)
{
Contract.Requires(!string.IsNullOrEmpty(name));
Contract.Requires(id > 0);
Contract.Ensures(Name == name);
//Do some work
}
通常在 FxCop 中,我们要检查的代码将在单独的 Dll 中,而包含要检查的规则的类库将在单独的 dll 中。同样,我们是否可以为代码契约创建单独的类库来管理现有代码?
请确认..
最佳答案
免责声明:您最好获取他们当前的文档并通读,写下功能然后进行比较。我在下面写的是我很久以前记得的关于它们核心功能的一些事实,我不能向你保证它们没有过时和现在是错误的。例如,有人可以为 FxCop 编写一些复杂而繁重的规则,这些规则的行为与契约(Contract)一样。这就是我将其标记为社区维基的原因。如果我有任何错误,请纠正我。
不,它们并不相似,尽管它们有共同的目标:帮助您找到错误。
FxCop 是一个“静态分析器”,它会检查您的代码并尝试找出“不良模式”。在运行时您不会看到任何 FxCop 规则/效果。 FxCop 有一组将在检查期间使用的“规则”,它会在发现规则被破坏时向您报告。规则可以非常简单和挑剔,比如 you must initialize every variable
or you must name classes with uppercase
或者复杂的规则,比如 you shouldn't have more than one loop在方法中
。标准安装提供了一些规则,您可以使用自己的规则扩展规则集。
CodeContracts 是双向的。在最基本的层面上,它是一组辅助方法,如 throw if argument 'foo' is null
。在运行时,当有人传递一个 null 时,它会抛出。就这么简单。但是,如果您在代码中正确且广泛地使用这些辅助方法,您将能够运行额外的静态分析器。它会扫描您的代码,找到这些辅助方法的所有用法,并会尝试自动检测它们的契约 不满足的任何地方。因此,对于“argument is null”示例,它将尝试查找该函数的所有用法,检查谁使用什么 args 调用它,它将尝试推断(证明)该 arg 是否可以随时为空,并且将如果发现这种情况,请警告您。除了 not-null 之外,还有更多类型的此类验证器,但您不能添加/编写自己的验证器。我的意思是,您可以添加更多这样的辅助验证器,但静态分析器不会拾取它们(为任何规则编写通用定理证明器太难了)。
CodeContracts 在分析方面比 FxCop 更强大,但在多样性和范围方面有限。 CodeContracts 无法检查代码的结构:它不会检查循环次数、代码复杂度、方法名称、代码层次结构等。它只能尝试证明/反驳某些契约(运行时要求) 一些方法/接口(interface)。另一方面,FxCop 可以检查您的代码、样式、结构等,但它不会“证明”或“推断”任何东西 - 它只会检查规则定义的一些不良模式。
关于c# - CodeContract 是否类似于 FxCop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31669851/
假设我有以下类层次结构: public class FooBase { private readonly object _obj; protected FooBase(object o
我有一个类似这样的结构: public struct Test { public int x; public int y; public static bool AreEqual(Test
我有一个使用代码契约的 C# PCL 项目。然而,在 TeamCity 上,项目构建失败,但看起来构建在本地是成功的。然而,构建日志确实声称构建确实失败了,但它没有给出任何原因。 “基于警告构建失败”
我有这个代码: public class CodeContractSample { private readonly List _items = new List(); public
我刚刚开始在一个现有的中型项目中试验 .NET 4 中的 CodeContracts,令我惊讶的是静态检查器向我发出有关以下代码片段的编译时警告: public class Foo { priv
我的类(class)有一个子项集合,我有一个公共(public)访问器。我想提供一个后置条件以确保集合中的项目不为空(我知道,在测试 2 和 3 中调用者可以更改集合,但现在我的目标只是确保从属性返回
我有几个用户控件,它们订阅了另一个类中的事件处理程序。我正在学习 C# 中的 CodeContracts,我想知道为什么静态分析器允许编写这样的代码: void MyUserControl_Mouse
我正在尝试在大型桌面应用程序项目中使用 .NET 3.5 的代码契约(Contract),该项目也具有混合模式 C++ DLL 依赖项,用旧的托管 C++ 语法编写。 真正的解决方案至少包含 20 个
请澄清一下,Code Contracts 是否类似于 FxCop 和 StyleCop?根据在线引用,我们需要在现有代码的函数中添加用于实现代码契约条件的代码。 public void Initial
一旦我为代码契约打开代码重写器,我开始发现以前可以工作的代码存在问题。 我有一个 protected volatile bool 成员字段,它在继承 self 的类的其他程序集中是可见的。在我的程序集
我尝试了以下代码来对检索到的实体启用某种非空检查,以确保它们在执行某些具体业务之前存在: protected T GetRequired(object id) where T : Entity
我可以开始使用 CodeContracts 而不是: if (XXX == Y) throw new ArgumentException("bla bla"); 如果我开发了一个库,而我的库用
给定以下 C# 代码, double x = 2.0; x *= 0.5; bool y = (x == 1.0); Console.WriteLine(y); CodeContracts 给出警告:
我终于 catch 了添加到 .NET 3.5/4.0 框架中的所有新功能。最近几天我一直在使用 CodeContracts,我真的很努力地喜欢它们。我很好奇其他人如何看待 C# 中的 CodeCon
我目前正在将 CodeContracts 添加到我现有的代码库中。 事实证明困难的一件事是使用由 NHibernate 水化的实体。 假设这个简单的类: public class Post {
我研究了使用条件框架来验证数据而不是 if(cond) throw new SomeException(); SomeFramework.MakeSure(cond); 最后我的选择是使用 CodeC
当 C# CodeContracts 时,我有几种报告警告的方法“代码契约(Contract):需要未经证实的:构造函数!= null”静态检查器已启用。 这些特定方法不声明任何契约,也不会被任何声明
我是 codeContracts 的新手,我喜欢它,因为它看起来很干净。 我不喜欢我需要下载一个库才能使其工作这一事实。一直不明白为什么微软没有将它作为整个框架的一部分。 我不想强制团队中的其他同事下
我正在寻找一种简单的方法来强制执行 INotifyPropertyChanged 的正确实现,即当 PropertyChanged 被引发时,它必须引用实际定义的属性。我尝试使用 Microsof
我收到此警告但无法找出问题... CodeContracts: warning: The Boolean condition d1.Count != d2.Count always evaluates
我是一名优秀的程序员,十分优秀!