我从Visual Studio 2010中获得了Code Contracts,但我无法ccrewrite.exe从命令行做任何有用的事情.这是一个示例应用程序:
using System.Diagnostics.Contracts;
public class Dummy
{
public static void Main(string[] args)
{
Contract.Requires(args.Length > 0);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我编译代码并在其上运行ccrewrite.exe:
> csc /debug+ /D:CONTRACTS_FULL Dummy.cs
> ccrewrite /o:RewrittenDummy.exe Dummy.exe
elapsed time: 61ms
Run Code Online (Sandbox Code Playgroud)
RewrittenDummy.exe之后没有文件.
我已经尝试了很多选项,但没有任何区别.我注意到的一些事情:
我已经尝试过警告和冗长,这根本没有帮助我做错了什么?
我想知道,如何在.NET Core中正确使用Code Contracts ,到目前为止我试图将CC添加到我的项目中,进行编译和调试.我对每个使用的呼叫中出现的消息Contract.Requires以及通过Google搜索找到的信息感到困惑.
消息说明:
必须使用代码契约二进制重写器(CCRewrite)重写程序集,因为它正在调用
Contract.Requires<TException>并且CONTRACTS_FULL符号已定义.CONTRACTS_FULL从项目中删除符号的任何显式定义并重建.CCRewrite ....
正如我所看到的,项目属性中没有CC选项,因为我可以看到CC的Github存储库几乎已经死了.是如何在.NET Core中成功使用CC的?
如果没有,是否有任何简单的方法来替换它们?我用Contract.Requires和ContractClassAttribute.更换Contract.Requires是显而易见的,但ContractClassAttribute让我大吃一惊:-)
我一直在Visual Studio Express 2013中开发一个C#项目,并且遇到了.NET语言的代码契约.他们的简洁性和随附的静态分析工具给我留下了深刻的印象,我开始在我的代码库中使用它们.但是,当我试图运行我的程序时,我遇到了类似于在这个SO线程中发现的错误消息,即
...必须使用代码契约二进制重写器(CCRewrite)重写程序集(可能是"<my project>"),因为它正在调用Contract.Requires并且定义了CONTRACTS_FULL符号.从项目中删除CONTRACTS_FULL符号的任何显式定义并重建...
指南建议要解决此问题,我必须从项目的"属性"页面启用代码约定,但在Express中无法找到代码约定属性条目.
一些MSDN论坛主题似乎表明代码合同的所有工具都包含在Express版本中,但Code Contracts Properties页面却没有.这似乎是这种情况,因为我能够在VSE 2013中运行我的项目,只有在我的大学毕业之前从我的大学获得的Visual Studio 2012 Ultimate的副本启用代码合同之后.
除了通过手动修改项目文件或使用付费版本的Visual Studio修改项目文件外,是否真的无法在Visual Studio Express中使用代码约定?如果是这种情况,我对使用它们非常犹豫,因为我的公司不太可能购买VS许可证.此外,微软试图扩展这种新的优越的验证范例,然后将其仅限于付费用户,这似乎是非常奇怪的.
.net c# code-contracts visual-studio-express visual-studio-2013