Condividi tramite


CA1900: I campi dei tipi di valore devono essere portabili

TypeName

ValueTypeFieldsShouldBePortable

CheckId

CA1900

Category

Microsoft.Portability

Breaking Change

Sostanziale: se il campo è visibile all'esterno dell'assembly.

Non sostanziale - Se il campo non è visibile all'esterno dell'assembly.

Causa

Questa regola consente di verificare che le strutture dichiarate con layout esplicito vengano allineate correttamente quando viene eseguito il marshalling a codice non gestito nei sistemi operativi a 64 bit. IA-64 non consente accessi di memoria non allineata e, se la violazione non viene corretta, il processo verrà arrestato.

Descrizione della regola

Le strutture con layout esplicito contenente campi non allineati determinano arresti del sistema nel sistema operativo a 64 bit.

Come correggere le violazioni

Tutti i campi di dimensioni inferiori a 8 byte devono avere offset che siano multipli della relativa dimensione, mentre i campi di 8 byte o superiori devono avere offset multipli di 8. Un'altra soluzione è utilizzare LayoutKind.Sequential anziché LayoutKind.Explicit, se adeguato.

Esclusione di avvisi

Il presente avviso dovrà essere escluso solo se si verifica in caso di errore.