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.