我的解决方案/项目在关闭此特定项目的代码合同的情况下构建良好。
当我在我的项目上打开执行运行时合同检查时,构建失败。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 目标文件吗?我会假设构建引擎将使用它在项目 csproj 文件中读取的顺序,在ItemGroup//ProjectReference
元素下,但事实并非如此。
有任何想法吗?