首页 新闻 搜索 专区 学院

Contract.Requires<ArgumentNullException>引发的未处理异常

1
悬赏园豆:50 [已解决问题] 解决于 2012-03-02 16:58

在构造函数中使用了Contract.Requires对参数进行检查,代码如下:

Contract.Requires<ArgumentNullException>(comment.BlogPost != null, 
"comment.BlogPost can not be null");

当comment.BlogPost的值为null时,会弹出会弹出Visual Studio Just-In-Time Debugger窗口:

查看事件日志(Windows Logs > Application),发现.NET Runteim 1025错误:

Application: w3wp.exe
Framework Version: v4.0.30319
Description: The application requested process termination through System.Environment.FailFast(string message).
Message: Must use the rewriter when using Contract.Requires<TException>
Stack:
at System.Environment.FailFast(System.String)
at System.Diagnostics.Contracts.Contract.AssertMustUseRewriter(System.Diagnostics.Contracts.ContractFailureKind, System.String)
at System.Diagnostics.Contracts.Contract.Requires[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](Boolean, System.String)

想要的效果是扔出ArgumentNullException异常,该如何实现?

dudu的主页 dudu | 高人七级 | 园豆:37126
提问于:2012-03-02 15:45
< >
分享
最佳答案
2

http://devlicio.us/blogs/derik_whittaker/archive/2010/06/30/error-contract-requires-lt-texception-gt-must-use-the-rewriter.aspx

看看这里,刚刚我没找到这里所需要的东西,在本地没有弄成功。

收获园豆:50
az235 | 大侠五级 |园豆:8283 | 2012-03-02 16:25

搞定!谢谢!

需要在Visual Studio中,打开使用Contract.Requires的项目的属性,选择Code Contracts:

1. 在Assembly Mode中选择"Standard Contract Requires"
2. 在Runtime Checking中选中"Perform Runteim Contract Checking",并设置为Full。

如下图:

dudu | 园豆:37126 (高人七级) | 2012-03-02 16:58

@dudu: 这东西是在哪里设置的,我怎么没找到这个页面,顺便说下是中文版的VS2010

az235 | 园豆:8283 (大侠五级) | 2012-03-02 17:08

@az235: 你要安装Code Contracts,下载地址:http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx

dudu | 园豆:37126 (高人七级) | 2012-03-02 17:16

@dudu: 难怪我找半天都找不到这东西:)

az235 | 园豆:8283 (大侠五级) | 2012-03-02 17:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册