2016-11-11 2 views
0

То, что я пытаюсь выполнить, - это обнаружение изменений в проектах во время сборки, поэтому я могу установить флаг, указывающий, что проект был изменен. Я уже понял, как определить, когда компонент C# изменился, используя инкрементные сборки и CoreCompileDependsOn. Но это не похоже на то, когда изменился файл содержимого проекта. Из того, что я понимаю, была бы задача Копировать где-то задание SkipUnchangedFiles = «true» в зависимости от настройки файла содержимого в проекте, «Копировать в выходной каталог» («Не копировать, копировать всегда, копировать, если новый»). Я не совсем уверен, где этот процесс, возможно, файл Microsoft.CSharp.targets? Может ли кто-нибудь проконсультироваться с тем, как добавить зависимую задачу, которая выполняется только в том случае, если обновленный файл был скопирован на вывод bin? Достаточно простого примера.Цели MSBuild - Как обнаружить изменения в файлах содержимого .csproj

+0

Это не может быть то, что вы хотите, но не могли бы вы сделать это git-репо и запустить скрипт с помощью команды git, чтобы увидеть, есть ли какие-либо пересмотренные изменения? –

+0

К сожалению нет, это в компании, которая использует только TFS. Также я могу сделать то же самое в TFS, но я не хочу использовать VCS для определения изменения, потому что тогда некоторые из них, как мне нужно сопоставить изменение с проектом, чтобы я мог идентифицировать имя продукта. Если я использую целевые объекты MSBuild, то, если что-либо в проекте изменится, у меня уже есть сведения о проекте. –

+0

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

ответ

2

Я понял. Это запишет текстовый файл с именем проекта ТОЛЬКО если какие-либо файлы содержимого, которые «Скопировать Если Новее» установлено, были изменены во время сборки:

 <Target Name="ContentFilesUpdated" AfterTargets="_CopyOutOfDateSourceItemsToOutputDirectory" Condition="'$(IsDesktopBuild)' == 'False'"> 
    <WriteLinesToFile 
     File="@(ProductChangeFile)" 
     Lines="$(ProjectName)" 
     Overwrite="false" 
     Encoding="Unicode" Condition="!Exists('@(ProductChangeFile)')"/>   

Смежные вопросы