Как заставить Visual Studio перечитать исходные файлы после обработки BeforeBuild? - PullRequest
3 голосов
/ 13 февраля 2012

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

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

1 Ответ

2 голосов
/ 28 августа 2012

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

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

 <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>

в файле .csproj, и это заставляет Visual Studio использовать «обычный» компилятор C # вместо «внутреннего», который использует кэшированные файлы.Предположительно, это снижает производительность, но я ее не заметил или не пытался измерить.

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

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

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

...