Вы пробовали RuntimeCompatibilityAttribute.WrapNonExceptionThrows ?
В качестве альтернативы, блок перехвата без типа должен перехватывать не соответствующие CLS исключения , то есть:
try
{
// Code here.
// Maybe a COM call here.
}
catch(Exception ex)
{
// Managed exceptions.
}
catch
{
// non CLS-compliant exceptions.
}
Использование отдельного AppDomain, скорее всего, не будет работать, в зависимости от того, почему именно ваше приложение убивается в первую очередь, так как необработанные исключения будут по-прежнему убивать весь процесс , и в настоящее время ваше исключение не обрабатывается каквы не уловили его.
В качестве альтернативы вы можете использовать COM-объекты в отдельном процессе и использовать межпроцессное взаимодействие между ними.Это изолировало бы проблемный код в его собственный процесс, который затем можно будет перезапустить / использовать по мере необходимости, без остановки основного процесса.