Re[2]: IL в Mono
От: Вестильд Россия  
Дата: 16.03.15 19:44
Оценка:
Здравствуйте, 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.