我目前在ASP.NET MVC应用程序中使用Microsoft Code Contracts没有任何问题,但我似乎无法在基本的ASP.NET网站上运行它。我不完全确定它是用于这种类型的项目(虽然它应该没关系)所以我想把它带给每个人。
我可以很好地编译合同但是代码会跳过它们,因为我假设它没有通过属性页面启用,就像你在其他项目类型(即ASP.NET MVC)中那样。我已经转到我的ASP.NET网站中的项目的属性页面(它显示一个对话框而不是典型的属性页面),但它没有产生相同的菜单选项,因此,没有专门的部分编码合同。
此外,我在类库项目中正确启用了Microsoft Code Contracts,我用它将业务逻辑与网站分开。合同编译正常,但是当合同被违反时,它会抛出一个没有内容异常的无法解释的"Exception of type 'System.ExecutionEngineException' was thrown"
错误。我的合同指定了一条在违规时显示的消息,但它不在异常范围内。它只是暂停了进程的执行(我认为这是Microsoft Code Contracts的默认功能)。
我找不到任何明确说明特定项目类型可以或不可以(或不应该)与合同一起使用的地方,所以我只想知道是否有人遇到过这个问题。
感谢您的帮助!
答案 0 :(得分:1)
我遇到了同样的问题,这就是我解决它的方法:
在Referenced类库中,右键单击 - >属性 - >代码合同。 确保选中“执行合同检查”。我把我的设置为“完整” 合同参考汇编:确保将其设置为“构建”
保存更改。
在其代码中没有合同的Referenced类库中,将Contract Reference Assembly设置为“Do Not Build”。
然后在MVC项目中,检查代码合同“执行合同检查”。我把我的设置为“完整”。
希望能帮助某人。
答案 1 :(得分:0)
这听起来不像是契约,更像是构建/配置问题。您是否尝试部署预建网站?您确定您的网站代码是否看到合同代码? ASP.NET运行时是使用CLR 4.0,还是看到早期的Microsoft.Contracts.dll?等