MSBuild 15.0 (Visual Studio 2017) выдает ошибку MSB4067 для решений с проектами SSDT (SSRS и SSAS)

MSBuild 14.0 (версия, включенная в Visual Studio 2015) регистрирует предупреждения (MSB4078) при создании решения, содержащего проекты SSDT (проекты rptproj или dwproj). Например:

предупреждение MSB4078: файл проекта "отчеты.rptproj " не поддерживается MSBuild и не может быть построен.

это нормально, MSBuild не поддерживает проекты SSDT, и мы должны вернуться к их созданию с помощью Visual Studio (т. е. devenv.com). См., например, ответ.

при использовании MSBuild 15.0 (версия, включенная в Visual Studio 2017), однако создание того же файла решения дает следующее :

отчеты.rptproj (3,3): ошибка MSB4067: элемент под элементом не распознан.

, А Я может удалите проекты SSDT из конфигурации сборки, что не идеально, так как я хочу, чтобы они были построены, когда построение решения из Visual Studio.

есть ли способ понизить ошибку MSB4067 до предупреждения или пропустить определенные проекты при создании решения?

2 ответов


Обновление (Октябрь 2017 Года)

последняя версия проектов служб Microsoft Reporting Services для Visual Studio (1.18) добавлена поддержка MSBuild для проектов SSRS. После установки этого SSRS-проекты могут быть обновлены до формата, поддерживаемого MSBuild, что предотвращает возникновение этой проблемы.


Оригинальный Ответ

Это ошибка в MSBuild 15, помеченный для исправления в " обновление фонда 2".

обходной путь, как указано в поток выпуска GitHub одним из сопровождающих MSBuild является:

разместить файл с этим содержимым рядом с на имя after.{yoursolutionname}.sln.targets:

<Project InitialTargets="WorkAroundMSBuild2064">
 <Target Name="WorkAroundMSBuild2064">
  <!-- Work around https://github.com/Microsoft/msbuild/issues/2064 by
   removing *.rptproj from the generated solution metaproject. -->
  <ItemGroup>
   <ProjectReference Remove="%(ProjectReference.Identity)"
                 Condition="'@(ProjectReference->'%(Extension)')' == '.rptproj'" />
  </ItemGroup>
 </Target>
</Project>

это, кажется, работает при условии, что нет зависимостей проекта от других .csproj проекты .rptproj проектов.


пропуск проектов может быть сделано с /ignoreprojectextensions:.rptproj, но я все равно получаю предупреждение (на VS2015), поэтому, предположительно, вы все равно получите ошибку.

что is можно указать список тех, кого вы do хотите построить с

msbuild /t:myCsProj /t:mySqlProj /t:myOtherProjThatIsntaRptProj

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

кроме того, существует несколько способов bodging MSBuild, чтобы быть в состоянии справиться с другие типы проектов (например,https://speaksql.wordpress.com/2013/06/07/a-journey-to-db-deployment-automaton-ssis-build-using-msbuild/).

Я видел этот подход "в дикой природе" пару раз, но только для SSIS. Я слышал, что его можно заставить работать и для SSRS/SSAS.