2015-03-17 3 views
1

TL; DR

Могу ли я создать предварительную сборку Visual Studio, которая пропускает сборку проекта без визуальной ошибки?Могу ли я создать скрипт `pre-build`, решить, следует ли строить или пропускать проект?

Подробности

У меня есть проект, который содержит пользовательский файл XML и сценарий Powershell, который генерирует файл ресурса из XML во время pre-build события.

Моя цель - только построить проект, если есть изменения в файле XML. Я уже могу определить, изменился ли файл, но я не могу сообщить Visual Studio пропустить сборку. Либо я останавливаю сценарий с кодом выхода 0 (который позволяет продолжить сборку), либо любым другим номером (который показывает уродливую ошибку в списке ошибок).

Может ли сценарий pre-build решить, следует ли строить или пропускать проект?

Пример

# Check to see if the current file is different from the file copied during build. 
if((Test-Path $buildXmlFile) -and (Compare-Object -ReferenceObject (Get-Content $projectXmlFile) -DifferenceObject (Get-Content $buildXmlFile))){ 
    Write-Host "Changes found! Rebuilding!" 
} else { 
    Write-Host "No changes found! Skipping Build" 
    # Exit 0 will cause it to still build... 
    # Exit -1, Exit 1, etc. will cause a big error to show... 
    # HOW DO I SKIP??? 
} 
+0

Значит, вы хотите создавать только при изменении xml-файла? Не когда другие исходные файлы меняются? –

+0

Да, но реальный вопрос: могу ли я заставить сборку пропускать (не прерывать) из события предварительной сборки. – JimmyBoh

+0

Я не думаю, что вы можете сделать это в сценарии предварительной сборки. Я предполагаю, что все это просто ускорит сборку, не перестраивая элементы, которые не изменились. Единственный способ, которым я знаю, это выполнить через Целевые входы и выходы. См. [Как сделать инкрементно] (https://msdn.microsoft.com/en-us/library/ms171483.aspx). Вы добавили бы шаг своего поколения в качестве цели с помощью BeforeTargets = «Build» в файле proj с вводом в качестве xml-файла и вывода как любых сгенерированных файлов. –

ответ

0

Я был в состоянии получить эту работу, вот как:

Терминология:

  • входной файл - отредактированный файл
  • выходного файла - The файл, созданный из входного файла
  • output dire ctory - Обычно .\bin\debug\ или .\bin\release

шаги:

  1. На сборки, скопируйте входной файл в выходной каталог (изменить это в окне свойств Visual Studio).
  2. Смените скрипт только на создание, если входной файл отличается от предыдущего входного файла (в настоящее время он находится в выходном каталоге).
  3. Выполнить сценарий как BeforeBuild цели, например, так:

Поскольку созданный файл живет только в выходном каталоге, MSBuild не имеет ничего, чтобы сравнить его с. Это означает, что он будет делать только полную сборку, если входной файл отличается от входного файла, который был ранее скопирован (помните, что копия происходит только после сборки, но сравнение происходит до сборки).

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

  • Нет связанных вопросов^_^