2013-04-16 2 views
2

Когда MSBuild происходит, я хочу, чтобы он завершился с ошибкой, если проект sharepoint (WSP из этого проекта) нацелен на GAC.MSBuild custom rules

ie. перед упаковкой я хочу проверить файл feature.xml или anyother .xml, на который нацелен пакет для этого пакета.

Каковы возможные способы достижения этого? У меня нет опыта. в пользовательских задачах MSBuild. Это выполнимо?

ответ

1

То, что я предлагаю бы следующее:

Создайте программу, которая принимает путь к вашему проекту в качестве параметра и анализирует его за ошибки, которые вы определяете сами. Когда ваша программа находит и ошибка, то она будет просто выводить ошибки на консоль в одном из следующих форматов:

error: <message> 
<filename>: error: <message> 
<filename> (<line>): error: <message> 
<filename> (<line>,<column>): error: <message> 

Вы можете заменить слово «ошибка» с «предупреждением». Когда вы используете этот конкретный формат, ошибки (или предупреждения) появятся в списке ошибок Visual Studios при компиляции с использованием VS. Передача имени файла и строки позволит включить функцию двойного щелчка по ошибке.

Далее вы открываете файл проекта и добавляете цель AfterBuild. В этой цели вы используете команду «Выполнить», чтобы вызвать свое собственное приложение и передать путь к проекту. Обязательно установите для атрибута ContinueOnError значение false.

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

Для этого вы также можете использовать задачу MSBuild, но я бы посоветовал вам этого не делать. Задача msbuild будет загружена в AppDomain вашей Visual Studio, заблокировав сборку. Если вы хотите его заменить (например, потому что вы изменили правила анализа), вам сначала нужно выйти из Visual Studio, чтобы разблокировать файл. Это будет очень раздражать при работе с системой управления версиями, когда люди просто хотят обновлять текущие файлы, не беспокоясь, заблокирована ли сборка или нет.

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

+0

Только что обнаружено, что цель VS - SP2010 называется - AssemblyDeploymentTarget http://msdn.microsoft.com/en-us/library/ee696754(v=vs.100).aspx – user729893