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

时间:2010-11-11 19:14:58

标签: .net msbuild code-contracts ccrewrite

我的解决方案/项目在此特定项目关闭代码合同的情况下构建良好。

当我在项目上打开执行运行时合同检查时,构建失败。 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应该能够处理任意顺序,特别是因为提供的'broken'排序是一个msbuild传递给Microsoft.CodeContracts.targets文件/ ccrewrite,但这对CC人来说是一个问题。我也在3台不同的机器上进行了测试,结果相同,所以它要么是ccrewrite问题,要么是ccrewrite不喜欢的特定csproj中的奇怪。

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这是该工具中的identified error,已在最新版本 v1.4.31130.0 2010-11-30中得到解决。