我一直在Visual Studio Express 2013中开发一个C#项目并且遇到过 代码合同 用于.NET语言。他们的简洁性和随附的静态分析工具给我留下了深刻的印象,我开始在我的代码库中使用它们。但是,当我尝试运行我的程序时,遇到的错误消息类似于找到的错误消息 这个SO线程,即
......一个程序集(可能是“<我的项目>”)必须是
使用代码合同重写二进制重写器(CCRewrite)因为
它调用Contract.Requires和CONTRACTS_FULL符号
定义。删除CONTRACTS_FULL符号的任何显式定义
从您的项目和重建...
指南建议要解决这个问题,我必须从项目的“属性”页面启用代码约定,但在Express中找不到代码约定属性条目。
一些MSDN论坛帖子 似乎表明代码合同的所有工具都包含在Express版本中,但代码合同属性页面不包含在Express版本中。这似乎就是这种情况,因为我能够在VSE 2013中运行我的项目,只有在使用我毕业之前从我的大学获得的Visual Studio 2012 Ultimate的副本启用代码合同之后。
除了通过手动修改项目文件或使用付费版本的Visual Studio修改项目文件外,是否真的无法使用Visual Studio Express中的代码约定?如果是这种情况,我对使用它们非常犹豫,因为我的公司不太可能购买VS许可证。此外,微软将试图扩展这种新的优越的验证范例,然后将其仅限于付费客户,这似乎是非常奇怪的。
只要您满足许可要求,您就可以使用新的VS Community 2013:
http://www.visualstudio.com/en-us/visual-studio-community-vs
以下是Visual Studio社区在组织中的使用方式:
一个
组织内无限数量的用户可以使用Visual Studio
社区适用于以下场景:在课堂学习中
环境,学术研究或为开源做贡献
项目。
对于所有其他使用场景:在非企业中
组织,最多5个用户可以使用Visual Studio社区。在
企业组织(意味着拥有> 250台PC或超过100万美元的企业)
美元年收入),开放后不允许使用
来源,学术研究和课堂学习环境
上述情景。
它基本上是免费的VS 2013 Professional,因此您可以安装代码合同扩展。
问题是您的Visual Studio版本。正如您所说,您正在运行Visual Studio 2013 Express版。要在Visual Studio中使用二进制重写器,您需要安装Code Contracts扩展。这些可以从Microsoft的软件工程研究(RiSE)站点下载,该站点打包为Windows Installer。
安装程序会安装所需的二进制重写器以及一堆Visual Studio扩展。不幸的是,代码合同在他们的 手册 第40页,他们不支持各种Visual Studio Express版本。您需要至少拥有Visual Studio 2013 Professional版本才能在Visual Studio中使用Code Contracts二进制重写器扩展,并且可以在项目属性窗口中查看Code Contracts选项卡。
代码契约执行程序集重写为 生成后 步。这意味着,Visual Studio首先会像往常一样编译.NET代码。但是,当使用代码约定并在项目上启用正确的选项时(假设安装了VS扩展 - 在Express版本中无法做到),那么在正常编译之后,Visual Studio将为您调用二进制重写器处理。
相反,在编译程序后,您需要手动运行 ccrewrite
程序契约在已编译的程序集(和所有依赖程序集)上安装的程序,以“重写”程序集,这将添加所有代码合同检查信息。有关如何执行此操作的信息,请参阅代码合同文档(也可在RiSE网站上获得)。
对于Visual Studio Express 2013来说,合同应该是无用的(至少代码合同带有适用于所有非快递版本的插件)。
所以必须定义符号 CONTRACTS_FULL
在 项目属性 - >构建 - >常规 - >条件编译符号。
然后添加正确的调用 ccrewrite.exe
到下面的post-build事件命令行 项目属性 - >构建事件。该命令应该设置为类似的东西
"C:\Program Files (x86)\Microsoft\Contracts\Bin\ccrewrite.exe" -throwOnFailure "$(TargetPath)"
我今晚成功地使用了NUnit。使用合同,我的单元测试不需要明确检查后置条件。