Используя Code Contracts, почему ccrewrite требует доступа к каждой зависимости во время выполнения? - PullRequest
0 голосов
/ 07 июля 2011

Я пытаюсь использовать кодовые контракты и сталкиваюсь с проблемой, которая блокирует меня.Если для компонента Reference Reference Assembly установлено значение Build, ccrewrite выдает ошибку при попытке доступа к сборкам, на которые косвенно ссылаются сборки, на которые ссылаются напрямую.Эти сторонние сборки не нужны для построения решения, поэтому мне интересно, почему они требуются в Code Contracts?Кроме того, есть ли способ обойти эту проблему, не предоставляя все зависимости времени выполнения как часть сборки?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2013

Программа перезаписи просматривает тела методов ссылочных сборок, чтобы извлечь контракты (компилятор C # никогда этого не делает). В результате переписчик часто преследует больше зависимостей, чем C #, с чем вы столкнулись.

Есть два способа решения этой проблемы.

  1. добавить дополнительные пути к каталогам, в которых можно найти нужные библиотеки (в параметрах путей к библиотекам контрактов). Это предпочтительный метод
  2. В качестве крайней меры вы можете добавить опцию -ignoreMetadataErrors к параметрам контракта во время выполнения. Обратите внимание, что это опасно. В случае, когда переписчику действительно нужен какой-то аспект ссылочного кода для создания правильного IL, вы можете получить неправильный IL. Чтобы защититься от этого, используйте peverify на полученных битах.

Надеюсь, это поможет.

0 голосов
/ 08 июля 2011

Я предполагаю, что ccrewrite пытается пройти цепочку зависимостей, чтобы проанализировать ее на предмет предварительных / постусловий и т. Д. Если на сборки ссылаются сборки, на которые вы, в свою очередь, ссылаетесь, то они потребуются для вашей программа для запуска, поэтому ccrewrite просто выполняет нормальный анализ, прежде чем вы действительно запустите программу.

Это основано на использовании JML; Я только сам начал изучать .NET Code Contracts. Но я считаю, что оба инструмента работают примерно по одним принципам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...