C ++ / CLI - это полноценный язык .NET, и, как и другие языки .NET, он очень хорошо работает в управляемом контексте. Подобно тому, как работа с нативными вызовами в C # может быть затруднена, чередование нативного C ++ и Managed C ++ может привести к некоторым проблемам. С учетом сказанного, если вы работаете с большим количеством собственного кода C ++, я бы предпочел использовать C ++ / CLI вместо C #. Есть немало ошибок, большинство из которых могут быть охвачены тем, что не пишите на C ++ / CLI, как если бы вы писали на C #, и не пишите так, как если бы вы писали на родном C ++. Это его собственная вещь.
Я работал над несколькими проектами C ++ / CLI, и подход, который я выбрал бы, действительно зависит от того, насколько разные уровни приложения подвергаются воздействию собственного кода C ++. Если большая часть ядра приложения является нативной, а точка интеграции между нативным и управляемым кодом немного размыта, я бы везде использовал C ++ / CLI. Преимущество элемента управления в C ++ / CLI перевесит его проблемы. Если у вас есть четкие точки взаимодействия, которые можно адаптировать или абстрагировать, тогда я настоятельно рекомендую создать мостовой слой C ++ / CLI с C # выше и C ++ ниже. Основная причина этого заключается в том, что инструменты для C # просто более развиты и более распространены, чем соответствующие инструменты для C ++ / CLI. С учетом сказанного, проект, над которым я работаю, был успешным и не был кошмаром, на который указал другой.
Я бы также убедился, что вы понимаете, почему клиент движется в этом направлении. Если идея заключается в том, что у них есть куча разработчиков C ++, и они хотят упростить им переход к написанию управляемого кода, я бы сказал клиенту, что изучение C # может быть менее сложным, чем изучение C ++ / CLI.
Если клиент считает, что C ++ / CLI работает быстрее, это просто неверно, поскольку все они компилируются в IL. Тем не менее, если клиент имеет много существующих или текущих собственных разработок на C ++, то текущий путь на самом деле может быть лучшим.