Вы всегда можете передать код через препроцессор C ++ (например, mcpp ) перед отправкой кода в компилятор C #. Это дало бы вам полную силу макросов C ++:)
Полагаю, вы могли бы использовать для этого задачу перед сборкой.
Я использую этот подход в одном из моих проектов (хотя это не C #, а совсем другой язык, но мне нужны были C ++, подобные макросам).