Использование Sonar MSBuild Runner с /p:IsPackaging=True

У меня есть определение сборки Visual Studio Team Services, содержащее задачу Visual Studio Build, окруженную задачей Sonar Begin Analysis и End Analysis. Сборка Visual Studio упаковывает надстройку, размещенную у поставщика SharePoint, с помощью свойства /p:IsPackaging=True. Если это свойство установлено, я получаю следующую ошибку от Sonar Build Runner:

2015-11-27T13:23:05.9534586Z WARNING: Duplicate project GUID: "31ef7995-fdbc-4307-9024-a3d640fdf987". 
Check that the project is only being built for a single platform/configuration and that that 
the project guid is unique. The project will not be analyzed by SonarQube. 

Конечно, я мог бы сначала построить решение без /p:IsPackaging=True и запустить анализ этого, а на втором этапе выполнить упаковку, но это похоже на пустую трату ресурсов, чтобы создавать решения дважды.

Есть идеи, как я могу упаковать надстройку, размещенную у поставщика SharePoint, и использовать ту же задачу для анализа кода с помощью Sonar?

Используемая версия сонара 5.1.2. И версия MSBuild.SonarQube.Runner, используемая задачей VSTS, — 1.0.1.


person Pascal Berger    schedule 30.11.2015    source источник


Ответы (1)


Извините, что отвечаю с такой большой задержкой!

Я просмотрел это, и кажется, что цели SharePoint msbuild дважды вызывают цель «Сборка» — один раз часть обычной сборки и один раз часть процесса упаковки. Чтобы анализ SonarQube отслеживал все артефакты сборки, мы внедрили некоторую логику, которая зависит от задачи сборки, и теперь эта логика вызывается дважды, и вы получаете проблему «Дублирующийся GUID проекта».

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

  • SonarQube Начало
  • MSBuild (без параметра /p:IsPackaging=true)
  • СонарКьюб Конец
  • MSBuild your_SP_project.csproj /t:Package

Обратите внимание, что второй вызов msbuild необходимо выполнить в вашем проекте sharepoint — вызов /t:Package в решении не будет работать, поскольку цели SharePoint не будут импортированы.

Пожалуйста, дайте мне знать, если это работает!

person Bogdan Gavril MSFT    schedule 07.12.2015
comment
Спасибо, это то, чем я более или менее сейчас занимаюсь. Один момент с этим подходом. У меня могут быть другие проекты MVC в том же решении, помимо SharePoint Web MVC. Знаете ли вы, как лучше всего это сделать (должен получиться файл надстройки SharePoint, веб-развертывание SharePoint и дополнительные веб-развертывания). В настоящее время я вызываю решение с помощью /p:IsPackaging /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:PackageLocation="MyPath". Должен ли я упаковывать проекты MVC внутри Sonar Task и вызывать цель пакета SP на втором этапе позже? - person Pascal Berger; 08.12.2015
comment
Потратил часы, пытаясь обойти эту проблему. Кажется, что любая упаковка сделает это (SharePoint, WebPublish...). Даже пытался реализовать это решение stackoverflow.com/questions/33788988 / Этап двойной сборки не приводит к значительному снижению производительности процесса сборки, поскольку большинство сборок уже собраны (по крайней мере, для первого раунда сборки). Большое спасибо!! - person baywet; 08.09.2016