Как сбой MSBuild при отсутствии файлов содержимого

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

Я хотел бы сбой сборки, когда отсутствуют javascript/графические файлы и т.д. Как я могу проверить файл проекта с файлами, вытащенными из svn?

Ответы

Ответ 1

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

<Target Name="ValidateContentFiles">
  <Error Condition="!Exists(%(Content.FullPath))" 
         Text="Missing Content file [%(Content.FullPath)]"/>
</Target>

Вы можете убедиться, что эта цель выполняется каждый раз, добавив ее в атрибут InitialTargets элемента Project. Например

<Project InitialTargets="ValidateContentFiles"
         ToolsVersion="3.5" DefaultTargets="Build" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

Сказал Ибрагим Хашими

Моя книга: Внутри Microsoft Build Engine: использование MSBuild и Team Foundation Build

Ответ 2

Вы также можете добавить условие ошибки в BeforeBuild Target, доступное в .csproj, как это:

<Target Name="BeforeBuild">
<Error Condition="!Exists(%(Content.FullPath))"
Text="Missing Content file [%(Content.FullPath)]"/>
</Target>

BeforeBuild всегда будет выполняться при создании проекта, поэтому вам не нужно добавлять атрибут InitialTargets к свойству Project.