Правда, это не будет миграцией кода, не так ли? По сути, вы переписываете систему, которая существует на языке a (в данном случае C ++) на языке b (C #). Эти два языка не имеют много общего для облегчения простого механического перевода (C # <-> Java гораздо проще переводить механически), и в зависимости от того, насколько современным является код C ++, вы не сможете перевести некоторые идиомы непосредственно.
Мой подход для проекта разумного размера - написать «кросс-компилятор» на языке, который позволяет легко обрабатывать текст (я использовал ruby в последний раз). Этот кросс-компилятор должен быть способен механически переводить около 80% кода в нечто, что почти компилируется на целевом языке. Это также позволяет вам определить области кода, которые требуют (много) внимания со стороны программиста, потому что вам придется взять существующий код и написать функциональный эквивалент в C #. Не забывайте, что для этого инструмента перевода вам также потребуется написать код, который может собрать необходимые фрагменты кода из заголовочных файлов и файлов реализации. В зависимости от того, насколько хорошо организован код C ++, это нетривиальная задача.