Вопрос об ошибках - PullRequest
1 голос
/ 07 июля 2010

Когда я запускаю утилиту peverify для моего .NET exe, я получаю несколько ошибок (классы, методы, переименованные):

[IL]: Error: [myapp.exe : namespace.class::method1][offset 0x00000027]
Instruction cannot be verified.

[IL]: Error: [myapp.exe : namespace.class::method2][offset 0x00000027]
Instruction cannot be verified.

[IL]: Error: [myapp.exe : namespace.class::method3][offset 0x00000313]
Instruction cannot be verified.

Меня это должно беспокоить? Все эти методы используют ключевое слово unsafe, которое, как я предполагаю, является причиной этой ошибки. Но я не могу найти какую-либо документацию об этой ошибке в Интернете, поэтому любые мысли будут высоко оценены. Спасибо!

Ответы [ 2 ]

2 голосов
/ 07 июля 2010

Ну, это не потому, что вы использовали ключевое слово unsafe .Это потому, что вы написали код, который скомпилирован, потому что вы использовали небезопасно.Да, peverify будет препятствовать при таком коде.это сама природа небезопасно.Вы не можете взять свой пирог и съесть его здесь.

1 голос
/ 07 июля 2010

Использовали ли вы stackalloc в этих методах? Пока я играл с этим, я обнаружил, что если stackalloc является первым появлением непроверяемого кода, тогда peverify выдает это сообщение об ошибке и игнорирует остальную часть метода. Однако обратное неверно. Если stackalloc появится позже в методе, то другие ошибки будут предшествовать ошибке, сгенерированной оператором stackalloc. Может быть, это ошибка?

Рассмотрим следующий пример.

public static void Main()
{
  unsafe
  {
    int* a = stackalloc int[100];
    int* b = null;
  }
}

Я получаю следующий результат:

[IL]: Error: [myassembly.exe : A.Program::Main][offset 0x00000007] Instruction cannot be verified. 
1 Error(s) Verifying myassembly.exe

Однако, если я закомментирую строку stackalloc, я получу такой результат:

[IL]: Error: [myassembly.exe : A.Program::Main][offset0x00000004][found Native Int][expected unmanaged pointer] Unexpected type on the stack. 
1 Error(s) Verifying myassembly.exe
...