When a protocol is defined in several files, common enumerated types and message definitions can be defined in different file from where they are used. For example a message definition can be defined in one file, and some aggregate may refer to this definition from some other file. You can unload or modify and reload the file, so that the referenced message definition doesn't exist anymore, but the aggregate referencing to this message definition exists. This will result in crash, if sending a message with this kind of invalid reference is tried. The same goes for common enumerated_type- and enumerated_ref-elements.
A workaround is to define the enumerated types and message definitions in the same file where they are referenced.