我的代码契约(Contract)在 Visual Studio 2010 中运行良好,但我无法获得 ccrewrite.exe
从命令行做任何有用的事情。这是一个示例应用程序:
using System.Diagnostics.Contracts;
public class Dummy
{
public static void Main(string[] args)
{
Contract.Requires(args.Length > 0);
}
}
然后我编译代码并在其上运行 ccrewrite.exe:
> csc /debug+ /D:CONTRACTS_FULL Dummy.cs
> ccrewrite /o:RewrittenDummy.exe Dummy.exe
elapsed time: 61ms
没有
RewrittenDummy.exe
之后归档。我尝试了很多选择,但没有任何区别。我注意到的一些事情:
我试过把警告和冗长调高,但这根本没有帮助
我究竟做错了什么?
(也被问为 question in the Code Contracts forum 。我会自己在这里添加任何相关的答案。)
最佳答案
好的,这是answered in the MSDN forum .这一次,并不是我真的完全愚蠢 - 这是真的可以通过警告来做的事情。
阅读论坛帖子以获取完整详细信息,但基本问题是 ccrewrite
找不到契约(Contract)类:它正在查找 mscorlib
的 .NET 3.5 CLR 版本而不是 .NET 4.0 一个。
这可以通过明确列出相关程序集的路径来解决:
> ccrewrite /o:rewrittendummy.exe dummy.exe
/libpaths:%SystemRoot%\Microsoft.Net\Framework\v4.0.20506
关于.net-4.0 - 为什么 ccrewrite.exe 没有从命令行执行任何操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1209166/