Я думаю, что большинство рекомендаций по этому вопросу сосредоточены на том факте, что C # - просто лучшая среда для создания приложений .NET, чем C ++ / CLI. Синтаксис чище, инструменты лучше - как в Visual Studio, так и от сторонних разработчиков. Вы получите больше и лучшую поддержку от разработчиков, которые почти все будут лучше знакомы с C #.
Приложения C ++ / CLI достаточно отличаются от стандартного C ++ всеми этими символами ^ и%, которые, по крайней мере, я считаю НЕ С ++.
Большинство советов также приходит с точки зрения того, что вы хотите создать приложение .NET, а C ++ / CLI больше используется в качестве связующего слоя. Всякий раз, когда я использовал C ++ / CLI, это было неохотно и почти всегда, потому что в какой-то сторонней библиотеке было много сложных объектов C / C ++, которые она передавала. При использовании C # и P / Invoke вам часто приходится создавать классы для отражения структур и классов, которые находятся в заголовочных файлах C ++ программного обеспечения, с которым вы взаимодействуете. Синхронизация людей является трудоемким делом, а делать ошибки легко. Кроме того, выяснение того, как распределить структуру с указателями на структуры массивов структуры, заставит ваш мозг таять!
Мой общий совет - использовать C # (или VB.NET) для создания максимально возможного количества кода для вашего приложения. Используйте P / Invoke, когда ваша потребность в вызове Win32 API и / или сторонних SDK ограничена, а интерфейсы и параметры просты. Используйте C ++ / CLI в качестве связующего слоя, когда это невозможно.
В командной среде ваши коллеги-разработчики будут благодарить вас за ограничение использования C ++ / CLI только там, где это абсолютно положительно требуется. Опыт работы с C ++ / CLI не столь распространен.