MSBuild 14.0(Visual Studio 2015附带的版本)在构建包含SSDT项目(rptproj或dwproj项目)的解决方案时记录警告(MSB4078)。例如:
警告MSB4078:项目文件" Reports.rptproj" MSBuild不支持,无法构建。
这很好,MSBuild不支持SSDT项目,我们必须回归到用Visual Studio构建它们(即devenv.com
)。例如,请参阅this answer。
使用MSBuild 15.0(Visual Studio 2017附带的版本)时,构建相同的解决方案文件会产生以下错误:
Reports.rptproj(3,3):错误MSB4067:元素< State>在元素下面< Project>未被承认。
虽然我可以从构建配置中删除SSDT项目,但这并不理想,因为我希望在从Visual Studio中构建解决方案时构建它们。
有没有办法将错误MSB4067降级为警告,或者在构建解决方案时跳过某些项目?
答案 0 :(得分:11)
更新(2017年10月)
Visual Studio的最新版Microsoft Reporting Services项目(1.18)adds MSBuild support for SSRS projects。安装完成后,可以将SSRS项目更新为MSBuild支持的格式,以防止此问题发生。
原始答案
这是MSBuild 15中的bug,标记为修复"基础更新2"。
其中一位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。