MSBuild 15.0(Visual Studio 2017)错误MSB4067用于SSDT(SSRS和SSAS)项目:&#34;元素<project>下面的元素<state>无法识别&#34;

时间:2017-05-02 10:16:22

标签: .net msbuild visual-studio-2017 sql-server-data-tools msbuild-15

MSBuild 14.0(Visual Studio 2015附带的版本)在构建包含SSDT项目(rptproj或dwproj项目)的解决方案时记录警告(MSB4078)。例如:

  

警告MSB4078:项目文件&#34; Reports.rptproj&#34; MSBuild不支持,无法构建。

这很好,MSBuild不支持SSDT项目,我们必须回归到用Visual Studio构建它们(即devenv.com)。例如,请参阅this answer

使用MSBuild 15.0(Visual Studio 2017附带的版本)时,构建相同的解决方案文件会产生以下错误

  

Reports.rptproj(3,3):错误MSB4067:元素&lt; State&gt;在元素下面&lt; Project&gt;未被承认。

虽然我可以从构建配置中删除SSDT项目,但这并不理想,因为我希望在从Visual Studio中构建解决方案时构建它们。

有没有办法将错误MSB4067降级为警告,或者在构建解决方案时跳过某些项目?

2 个答案:

答案 0 :(得分:11)

更新(2017年10月)

Visual Studio的最新版Microsoft Reporting Services项目(1.18)adds MSBuild support for SSRS projects。安装完成后,可以将SSRS项目更新为MSBuild支持的格式,以防止此问题发生。

原始答案

这是MSBuild 15中的bug,标记为修复&#34;基础更新2&#34;。

其中一位MSBuild维护者在GitHub issue thread中给出的解决方法是:

  

将包含这些内容的文件放在.sln文件旁边,并使用特殊名称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项目没有项目依赖项,这似乎有效。

答案 1 :(得分:0)

跳过项目可以使用/ignoreprojectextensions:.rptproj完成,但我仍然收到警告(在VS2015上),所以大概你仍然会收到错误。

的可能性是指定 想要构建的

的列表
msbuild /t:myCsProj /t:mySqlProj /t:myOtherProjThatIsntaRptProj

当然,这是否可行取决于有多少&#34;其他&#34;您在解决方案中拥有的项目。

或者,有一些方法可以阻止MSBuild处理其他项目类型(例如https://speaksql.wordpress.com/2013/06/07/a-journey-to-db-deployment-automaton-ssis-build-using-msbuild/)。

我已经看过这种方法&#34;在野外&#34;有几次,但只有SSIS才有。我听说它也可以用于SSRS / SSAS。