Мое решение / Проект прекрасно работает с отключенными контрактами кода для этого конкретного проекта.
Когда я включаю Выполнить проверку контракта во время выполнения в моем проекте, сборка завершается неудачно. Переписывающее устройство CC начинает выводить сотни сообщений в следующем виде:
Could not resolve member reference: ....
Кажется, эта проблема вызвана порядком ссылок на проекты, передаваемых ccrewrite через аргумент libpaths
. Когда я разбираю сборку и запускаю ее в командной строке, и вручную указываю ссылки в определенном порядке на 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, либо что-то странное в этом конкретном csproj, что ccrewrite не нравится.
Что мне интересно, так это то, могу ли я обеспечить конкретное упорядочение моих ссылочных проектов, которые передаются по цепочке в файл целей CC? Я бы предположил, что механизм сборки будет использовать порядок, который он читает в файле csproj проекта, в элементах ItemGroup//ProjectReference
, но это не так.
Есть идеи?