2010-07-07 10 views
1

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

[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

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

+0

я понял, что это было что-то делать с этим , но без каких-либо документов я просто хотел убедиться. Благодаря! –

1

Вы использовали 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 
+0

Я использую stackalloc, и я думаю, что могу просто смело игнорировать эти ошибки. –

+0

@Jon: Да, я думал, что вы можете использовать 'stackalloc'. Вы можете определенно проигнорировать ошибку, если все в порядке с запуском непроверяемого кода. –