Короткий ответ: никогда не преобразовывайте файл во время сборки. Любое преобразование должно обязательно создавать новый файл в другом месте или с другим именем.
Длинный ответ. MSBuild отслеживает, если файл обновлен на основе временных меток. Это тот же механизм, который используется make
большинством других систем сборки. Это позволяет вашим инкрементным сборкам выполнять частичную перестройку только необходимых шагов сборки. Обратите внимание, что для того, чтобы сделать инкрементные сборки, вы должны объявить все входные и выходные файлы в целевых Inputs
и Outputs
атрибутах. Если у вас есть тот же файл, Inputs
что и в нем Outputs
, он будет считаться актуальным, и цель не будет выполнена, что нарушит вашу сборку.
Если вам не нужна инкрементная сборка, вы можете заставить ее работать, просто создавая цель, которая не имеет Inputs
и Outputs
. В этом случае цель всегда будет выполнена. Это связано с ценой, которую вы делаете в полной мере каждый раз.