После некоторого исследования мой коллега сказал мне, что это подтвержденная ошибка в Visual Studio 2008 SP1, что нет доступных исправлений, и что удаление SP1 решает проблему. У меня нет ссылки на эту информацию.
Наше решение состояло в том, чтобы переместить файлы реализации C # из проекта C ++ и сделать так, чтобы они компилировались с использованием пользовательского шага сборки (с помощью параметра / target: module для csc.exe), и включить объектные файлы в исходный код C ++ файлы, которые ссылаются на наши управляемые типы C #, например:
#using "MyCScode.obj"
Предостережения:
Сетевой модуль должен использовать расширение .obj, это похоже на ошибку в том, как Visual Studio определяет, какие входные данные будут использоваться для компоновщика (обычно вместо этого вы называете его .netmodule).
Мы по-прежнему получаем полную перестройку всех исходных файлов C ++, имеющих #using, при каждом обновлении файлов C #. Но это лучше, чем полная перестройка всего проекта.