标签: code-contracts

.Net 4 Code Contracts静态分析仪的任何替代品?

似乎与.NET 4.0 Code Contracts一起使用的静态分析器仅适用于Visual Studio的Team Suite版本 - 这使得它远远超出了我的团队的预算.

是否有任何替代方案(开源,免费或价格合理),通过合同样式代码(不一定使用.net代码合同)为设计提供类似的静态分析.我猜这个答案是肯定的,因为只有当BCL本身有合同时才能获得全部价值 - 但有没有哪个部分合作?

.net c# static-analysis visual-studio-2010 code-contracts

9
推荐指数
1
解决办法
1484
查看次数

如何为现有框架(BCL)代码指定代码合同?

代码合同很有效,直到您必须为Contract.Assume(...)框架代码中的结果添加一个bazillion .例如,MemoryStream.ToArray()永远不会返回一个空数组,就像我在Reflector中查看它一样,但它没有记录为契约,所以我必须Assume到处都是.

是否有一种神奇的方法来为已经存在的功能创建合同库?我猜测,一旦你完成了几十个最常用的框架功能,这些警告就会变得更加可口.

c# code-contracts

9
推荐指数
1
解决办法
186
查看次数

使用代码约定指定返回值可以为null

有没有明确地指定一个返回值的方法可以使用代码契约为空?

我担心的是,没有a的方法Contract.Ensures(Contract.Result<object>() != null)将来可能被错误地"修复"以包括后置条件,即使最初的意图可能是允许空结果.

.net c# code-contracts

9
推荐指数
1
解决办法
1685
查看次数

代码合同真的有助于单元测试吗?

我对单元测试有相当多的了解.我一直试图阅读代码合同.它真的有助于单元测试吗?它是否被高估了,特别是当我们谈论有助于进行单元测试的代码合同时.我特指的是.net 4.0中的合同.我使用nunit进行单元测试.

c# unit-testing .net-4.0 code-contracts

8
推荐指数
1
解决办法
898
查看次数

如何在不使代码看起来混乱的情况下在.NET 4.0中使用代码契约?

我已经开始使用代码契约,并发现它很难立即发现方法的"胆量".

拿这个(非常简单)的例子:

public static void UserAddNew(string domain, string username, string displayName)
{
    Contract.Assert(!string.IsNullOrWhiteSpace(domain));
    Contract.Assert(!string.IsNullOrWhiteSpace(username));
    Contract.Assert(!string.IsNullOrWhiteSpace(displayName));

    LinqDal.User.UserAddNew(domain, username, displayName);
}
Run Code Online (Sandbox Code Playgroud)

现在我很想将合同放在一个区域,以便它们可以被隐藏起来,但是我担心我会失去一个很好的优势,能够浏览方法并看到它的期望.

你怎么做才能让你的合同"整洁"?或者我只是太挑剔了?

contracts code-formatting code-contracts c#-4.0

8
推荐指数
1
解决办法
1523
查看次数

代码合同理解错误

我刚开始使用Code Contracts,需要一些帮助来纠正错误:

鉴于此代码:

class MyClass
{
    private bool _isUsed = false;

    public void SomeMethod()
    {
        Contract.Requires(!_isUsed);
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

error CC1038: Member 'MyClass._isUsed' has less visibility than the enclosing method 'MyClass.SomeMethod'
Run Code Online (Sandbox Code Playgroud)

这似乎使很多标准检查不可用.我在这个例子中缺少什么?

.net-4.0 code-contracts

8
推荐指数
2
解决办法
1187
查看次数

代码合同和继承问题,究竟是什么?

我可能会误解代码合同,但这是我的情况.

我有以下代码:

interface IFetch<T>    // defined in another DLL
{
    T Fetch(int id);
}

interface IUserFetch : IFetch<User>
{
    IEnumerable<User> GetUsersLoggedIn ();
}

class UserFetch : IUserFetch
{
    public User Fetch(int id)
    {
        return (User) Database.DoStuff (id);
    }

    public IEnumerable<User> GetUsersLoggedIn ()
    {
        return (IEnumerable<User>) Database.DoMoreStuff ();
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试添加一个相对简单的合同: Contract.Requires (id != 0);,我想要验证它Fetch.当我直接将其添加到Fetch时,我会收到警告Method Fetch(int id) implements interface 3rdParty.IFetch<User> and thus cannot add Requires.

我创建了一个实现IFetch的抽象代码契约类,ContractClassContractClassFor分别使用和属性将其指向/从UserFetch .我仍然得到一个错误CodeContracts: The class 'FetchUserContracts' is …

c# code-contracts

8
推荐指数
2
解决办法
2119
查看次数

是否保证在调用链式构造函数之前评估代码合约?

在我开始使用代码约定之前,有时在使用构造函数链时会遇到与参数验证相关的繁琐.

这是一个(人为的)示例最简单的解释:

class Test
{
    public Test(int i)
    {
        if (i == 0)
            throw new ArgumentOutOfRangeException("i", i, "i can't be 0");
    }

    public Test(string s): this(int.Parse(s))
    {
        if (s == null)
            throw new ArgumentNullException("s");
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望Test(string)构造函数链接Test(int)构造函数,并使用int.Parse().

当然,int.Parse()不喜欢有一个null参数,所以如果s为null,它将在我到达验证行之前抛出:

if (s == null)
    throw new ArgumentNullException("s");
Run Code Online (Sandbox Code Playgroud)

这使得检查毫无用处.

如何解决?好吧,我有时习惯这样做:

class Test
{
    public Test(int i)
    {
        if (i == 0)
            throw new ArgumentOutOfRangeException("i", i, "i can't be 0");
    }

    public Test(string s): …
Run Code Online (Sandbox Code Playgroud)

c# code-contracts constructor-chaining

8
推荐指数
1
解决办法
327
查看次数

"类型或命名空间名称'[Type]'在此范围内无效"Visual Studio Watch Window中的错误?

我在Watch Window尝试观察任何类型时遇到麻烦,我不断收到错误"类型或命名空间名称'[Type]'在此范围内无效".我必须在监视窗口中提供完整的命名空间以及类型来修复此错误.

这只是任何类型的例子 -

如果我添加一个像new Uri(Location) 手表窗口的手表显示错误.所以我应该包含new System.Uri(Location)它的命名空间.这更令人烦恼.

找到此链接,找到它的项目的代码合同设置导致此问题.禁用运行时合同检查代码合同后,Watch/Quick Watch按预期工作.

项目属性 - >代码合同 - >禁用执行运行时合同检查

启用运行时合同检查代码合同有什么问题?代码合同设置有问题吗?或与项目设置有关?或Visual Studio中的错误?

c# ide code-contracts visual-studio-2012

8
推荐指数
1
解决办法
1511
查看次数

Microsoft代码合同:错误"CodeContracts:Diagnostic:无法连接到任何缓存."

运行Microsoft代码合同时出现以下错误:

CodeContracts:诊断:无法连接到任何缓存.

c# sql code-contracts

8
推荐指数
1
解决办法
1176
查看次数