Как заставить Visual Studio перечитать исходные файлы после обработки BeforeBuild?

Я написал препроцессор С#, который я включил в мои проекты .csproj, вызвав его, используя целевой объект PreBuild MSBuild. Это работает нормально, за исключением того, что, когда препроцессор модифицировал один или несколько исходных файлов С# в проекте (это происходит довольно редко), на этапе компиляции С# используется кешированная версия исходного файла. По завершении сборки Visual Studio предлагает мне сообщение "filename-this-or-that, что этот файл был изменен вне исходного редактора. Вы хотите его перезагрузить?". Поэтому я должен ответить "Да" и перестроить проект, чтобы заставить его использовать измененные исходные файлы.

Есть ли способ заставить Visual Studio обнаружить, что исходные файлы были изменены, и использовать обновленные версии на этапе компиляции? Или я должен ссылаться на свой препроцессор каким-то другим способом, а не на использование цели BeforeBuild?

Ответ 1

Это не оптимальное решение, но это лучшее, что я придумал до сих пор.

Как описано здесь http://social.msdn.microsoft.com/Forums/en-US/vsdebug/thread/6c042390-0782-4afe-94be-9746d75f5d34/, вы можете разместить

 <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>

в файле .csproj и получает Visual Studio для использования "нормального" компилятора С# вместо "внутреннего", который использует кешированные файлы. Это, по-видимому, снижает производительность, но я этого не заметил или пытался измерить.

И, как описано здесь http://startbigthinksmall.wordpress.com/2009/03/16/visual-studio-tipp-auto-refresh-file-changes/, вы можете заставить Visual Studio перестать навязывать вам обновленные файлы и просто перезагрузить их.

Я все же предпочел бы найти способ сообщить Visual Studio обновить свои кешированные файлы, а затем вызвать его внутренний компилятор...

Я отмечаю это как "ответ", но мне все же хотелось бы услышать лучшие возможности, и если это произойдет, я отменим это.