Краткий ответ: да, PEVerify необходимо загрузить ссылочные сборки.
Формат сборки довольно автономен. Но действительно есть несколько вещей, которые PEVerify должен проверять в ссылочных сборках.
Общие экземпляры
В сборке, когда вы используете универсальный тип или универсальный метод, исходный универсальный арность не сохраняется, и вам необходимо загрузить определение типа или метода, чтобы правильно проверить создание экземпляров, как для арности ( имеет ли экземпляр правильное число универсальных аргументов?) и для ограничений (универсальный аргумент удовлетворяет универсальному ограничению, указанному в универсальном параметре?). Проверка не будет выполнена, если PEVerify не сможет найти ссылочные сборки.
Доступ к ссылочным элементам
Если вы вызываете метод или манипулируете полем, определенным в другой сборке, PEVerify попытается загрузить сборку, определяющую элемент, чтобы проверить, имеет ли элемент соответствующую видимость.
Не удастся проверить, не удалось ли найти сборку, в противном случае будет выдана ошибка «Невозможно разрешить токен».
Есть пара других случаев, когда для правильного чтения фрагмента метаданных необходимо разрешить ссылку на тип и, следовательно, загрузить содержащую его сборку, но я не думаю, что PEVerify проверяет их:
Создание экземпляра пользовательского атрибута, содержащего перечисления:
Например:
[AttributeUsage (AttributeTargets.Field)] * 1024 *
Вы должны загрузить определение AttributeTargets, чтобы знать, что оно поддерживается int32, охватывающим более 4 байтов, в форме сериализованного пользовательского атрибута.
Поля, значения которых сериализуются в двоичной форме:
Некоторые компиляторы могут решить сохранить постоянное значение в двоичном виде в сборке. В случае, когда тип константы не является известным примитивом, необходимо разрешить ссылку на этот тип, чтобы узнать ее размер.
Но опять же, я не думаю, что PEVerify проверяет эти случаи. Я на самом деле почти уверен, что он не проверяет кодировку пользовательских атрибутов, для второго пункта я не уверен.