标签: ccrewrite

为什么ccrewrite.exe没有从命令行做任何事情?

我从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之后没有文件.

我已经尝试了很多选项,但没有任何区别.我注意到的一些事情:

  • 它肯定是加载Dummy.exe,因为如果我指定一个不存在的文件,它就会死掉
  • Dummy.exe肯定包含对Contract的引用 - 如果我在没有参数的情况下运行它,它会正确地失败(但是如果它已被重写,则错误消息没有被填写)
  • 使用后置条件和不变量没有区别

我已经尝试过警告和冗长,这根本没有帮助我做错了什么?

(也是代码合同论坛中的一个问题.我会在这里添加任何相关的答案.)

.net-4.0 code-contracts ccrewrite

27
推荐指数
1
解决办法
5585
查看次数

代码合同重写失败 - libpaths命令

我的解决方案/项目构建良好,关闭此特定项目的代码合同.

当我打开我的项目执行运行时合同检查时,构建失败.CC重写者开始按照以下方式提出数百条消息:

Could not resolve member reference: ....

看来这个问题是由通过libpaths参数传递给ccrewrite的项目引用的顺序引起的.当我拆开构建并在命令行上运行它时,我按照特定顺序手动指定引用到libpaths,ccrewrite工作,构建完成.

例如

ccrewrite /level:4 /rewrite "/assemblyMode=standard" /throwonfailure /libpaths:"X Y Z" "target.dll" -- fails :(

ccrewrite /level:4 /rewrite "/assemblyMode=standard" /throwonfailure /libpaths:"Z Y X" "target.dll" -- compiles/rewrites :)

这对我来说有点奇怪,我以为ccrewrite应该能够处理任意顺序,特别是因为提供的'破坏'排序是msbuild传递给Microsoft.CodeContracts.targets文件/ ccrewrite,但是这对CC人来说是一个问题.我也在3台不同的机器上进行了测试,结果相同,所以它要么是ccrewrite问题,要么是ccrewrite不喜欢的特定csproj的奇怪之处.

我想知道的是,我可以确保我的参考项目的特定顺序,它们被链接传递到CC目标文件吗?我原以为构建引擎会在ItemGroup//ProjectReference元素下使用它在项目csproj文件中读取的顺序,但事实并非如此.

有任何想法吗?

.net msbuild code-contracts ccrewrite

5
推荐指数
1
解决办法
504
查看次数

标签 统计

ccrewrite ×2

code-contracts ×2

.net ×1

.net-4.0 ×1

msbuild ×1