Maybe you can just inherit from System.Exception?
type CustomExn<'TMessage> (message:'TMessage list) =
inherit System.Exception ()
let test =
try
raise (CustomExn["string"] )
with
| :? CustomExn -> "CustomExn of string"
| :? CustomExn -> "CustomExn of int"
| _ -> "Everything else"