我一直在Visual Studio Express 2013中开发一个C#项目,并且遇到了Code Contracts的.NET语言。他们的简洁性和随附的静态分析工具给我留下了深刻的印象,我开始在我的代码库中使用它们。但是,当我试图运行我的程序时,遇到的错误信息类似于this SO thread中的错误信息,即
...一个程序集(可能是“< my project>”)必须是 使用代码合同重写二进制重写器(CCRewrite)因为 它调用Contract.Requires和CONTRACTS_FULL符号 定义。删除CONTRACTS_FULL符号的任何显式定义 来自你的项目并重建......
指南建议要解决此问题,我必须从项目的“属性”页面启用代码约定,但在Express中找不到“代码合同属性”条目。
Some MSDN forum threads似乎表明代码合同的所有工具都包含在Express版本中,但代码合同属性页面却没有。这似乎是这种情况,因为我能够在VSE 2013中运行我的项目,只有在我的大学毕业之前从我的大学获得的Visual Studio 2012 Ultimate的副本启用代码合同之后。
除非通过手动或使用付费版本的Visual Studio修改项目文件,否则无法在Visual Studio Express中使用代码约定?如果是这种情况,我对使用它们非常犹豫,因为我的公司不太可能购买VS许可证。此外,微软试图扩展这种新的优越的验证范例,然后将其限制为仅向付费用户,这似乎是非常奇怪的。
答案 0 :(得分:6)
只要您符合许可要求,您就可以使用新的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,因此您可以安装代码合同扩展程序。
答案 1 :(得分:5)
问题是您的Visual Studio版本。正如您所说,您正在运行Visual Studio 2013 Express版。要在Visual Studio中使用二进制重写器,您需要安装Code Contracts扩展。这些可以从Microsoft的软件工程研究(RiSE)站点下载,该站点打包为Windows Installer。
安装程序会安装所需的二进制重写器以及一堆Visual Studio扩展。不幸的是,Code Contracts在第40页的manual中声明它们不支持各种Visual Studio Express版本。您需要至少拥有Visual Studio 2013 Professional版本才能在Visual Studio中使用Code Contracts二进制重写器扩展,并且要在项目属性窗口中查看Code Contracts选项卡。
Code Contracts将程序集重写作为 post-build 步骤执行。这意味着,Visual Studio首先会像往常一样编译.NET代码。但是,当使用代码约定并在项目上启用正确的选项时(假设安装了VS扩展 - 在Express版本中无法做到),那么在正常编译之后Visual Studio会为您调用二进制重写器过程
相反,在编译程序之后,您需要在编译的程序集(以及所有相关程序集)上手动运行由Code Contracts安装的ccrewrite
程序来“重写”程序集,这将添加在所有代码合同检查信息中。有关如何执行此操作的信息,请参阅代码合同文档(也可在RiSE网站上获得)。
答案 2 :(得分:3)
对于Visual Studio Express 2013来说,合同应该是无用的(至少代码合同附带了所有非快递版本的插件)。
因此,必须在项目属性中定义符号CONTRACTS_FULL
- >构建 - >一般 - >条件编译符号。
然后将对ccrewrite.exe
的正确调用添加到项目属性 - >下的构建后事件命令行中。建立活动。该命令应设置为
"C:\Program Files (x86)\Microsoft\Contracts\Bin\ccrewrite.exe" -throwOnFailure "$(TargetPath)"
今晚我成功使用了NUnit。使用合同,我的单元测试不需要明确检查后置条件。