14

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

警告 MSB4078:项目文件“Reports.rptproj”不受 MSBuild 支持,无法构建。

这很好,MSBuild 不支持 SSDT 项目,我们不得不退回到使用 Visual Studio(即devenv.com)构建它们。例如,请参阅此答案

但是,在使用 MSBuild 15.0(Visual Studio 2017 中包含的版本)时,构建相同的解决方案文件会出现以下错误

Reports.rptproj(3,3):错误 MSB4067:元素 <Project> 下的元素 <State> 无法识别。

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

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

4

2 回答 2

15

更新(2017 年 10 月)

最新版本的 Microsoft Reporting Services Projects for Visual Studio (1.18)添加了对 SSRS 项目的 MSBuild 支持。安装后,可以将 SSRS 项目更新为 MSBuild 支持的格式,从而防止发生此问题。


原始答案

这是 MSBuild 15 中的一个错误,在“基础更新 2”中标记为修复。

MSBuild 维护者之一在GitHub 问题线程中给出的解决方法是:

.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

于 2017-08-16T13:54:54.323 回答
0

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

可以指定一个您想要构建的列表

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

当然,这是否可行取决于您的解决方案中有多少“其他”项目。

或者,有一些方法可以使 MSBuild 能够应对其他项目类型(例如https://speaksql.wordpress.com/2013/06/07/a-journey-to-db-deployment-automaton-ssis-使用 msbuild/ 构建)。

我已经多次“在野外”看到过这种方法,但只适用于 SSIS。我听说它也可以用于 SSRS/SSAS。

于 2017-05-03T12:13:57.813 回答