Это означает, что вы пытаетесь получить доступ к индексу массива, который недопустим, поскольку он не находится между границами.
Например, это инициализировало бы примитивный целочисленный массив с верхней границей 4 .
int intArray[] = new int[5];
Программисты подсчитываются с нуля. Таким образом, это, например, выбрало бы ArrayIndexOutOfBoundsException
, поскольку верхняя граница равна 4, а не 5.
intArray[5];
Самые большие проблемы связаны с API, поддерживаемыми Mono. Использование поддержки Visual Studio Integration в Mono может очень помочь в этом, поскольку вы можете настраивать Mono все время на всех платформах.
По вашим конкретным вопросам:
1) Interop - You нужно будет придерживаться P / Invoke. Постарайтесь выделить это в отдельные сборки для конкретной платформы. Это приводит к 2:
2) Использование #if - я бы избегал этого и предпочел бы использовать модель расширяемости. Mono поддерживает Managed Extensibility Framework , который обеспечивает хороший способ «встраивания» кода конкретной платформы во время выполнения.
Проект Mono предоставляет документ с рекомендациями по переносимости. Это довольно хорошее место для начала.