私のソリューション/プロジェクトは、この特定のプロジェクトのコードコントラクトをオフにして正常にビルドされます。
プロジェクトで[ランタイムコントラクトチェックの実行]をオンにすると、ビルドが失敗します。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 :)
これは私には少し奇妙に思えます。特に、提供された「壊れた」順序は、msbuildがMicrosoft.CodeContracts.targetsファイル/ ccrewriteに渡すものであるため、ccrewriteは任意の順序を処理できるはずだと思いましたが、それはCCの人たちにとっての問題です。また、これを3つの異なるマシンでテストしたところ、同じ結果が得られたため、ccrewriteの問題か、この特定のcsprojでccrewriteが気に入らない奇妙な問題が発生しました。
私が疑問に思っているのは、CCターゲットファイルにチェーンに沿って渡される参照プロジェクトの特定の順序を確認できますか?ビルドエンジンは、プロジェクトのcsprojファイルで読み取る順序をItemGroup//ProjectReference
要素の下で使用すると想定していましたが、そうではありませんでした。
何か案は?