Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Вестильд, Вы писали:
В>>Моновский PEVerify в Nemerle.dll ничего не находит. А вот MS-ный находит одну ошибку: Value class has neither fields nor size parameter.
В>>Похоже, что дело в FakeVoid.
VD>Надо задать размер структуры через атрибуты. Посмотри декомпилятором как сделано для стандартного воида в мскорлиб-е. Ну, или тупо добавить однобайтовое поле.
Quick fix:
[StructLayout(LayoutKind.Explicit, Size=1, Pack=0)]
public struct FakeVoid { }
Но. Я вижу 4 варианта решения:
1. Забить. Моновский PEVerify не ругается и ладно.
2. Использовать Quick fix. Но тогда всем последующим объявлениям структур без полей потребуется этот атрибут.
3. Вставить в Немерле проверку, которая будет указывать размеры Size=1, Pack=0 для таких структур. Моновский компилятор c# делает то же самое.
4. Исправить Emit в моно. Я проверил в wine, и похоже микрософтовский эмит сам размеры не указывает.
На мой взгляд правильным будет вариант № 3.