Reporting services 是否可以自定义Visual Studio 2017 SSRS rptproj MSBuild文件?

Reporting services 是否可以自定义Visual Studio 2017 SSRS rptproj MSBuild文件?,reporting-services,msbuild,visual-studio-2017,Reporting Services,Msbuild,Visual Studio 2017,我的公司对自定义MSBuild目标文件库进行了大量投资,我们使用这些文件来构建完整的产品。我们在源代码管理中拥有的每个项目文件都至少导入一个自定义目标文件,这些文件最终都会导入一个核心目标文件,其中包含大量的通用目标和属性 最近,我们在解决方案中添加了一个新的SSRS项目,这个项目(我相信)是2017年末引入的新rptproj格式——特别是,它声明了ToolsVersion=“15.0”并从VS 2017安装目录中导入Microsoft.ReportingServices.MSBuilder.t

我的公司对自定义MSBuild目标文件库进行了大量投资,我们使用这些文件来构建完整的产品。我们在源代码管理中拥有的每个项目文件都至少导入一个自定义目标文件,这些文件最终都会导入一个核心目标文件,其中包含大量的通用目标和属性

最近,我们在解决方案中添加了一个新的SSRS项目,这个项目(我相信)是2017年末引入的新rptproj格式——特别是,它声明了
ToolsVersion=“15.0”
并从VS 2017安装目录中导入
Microsoft.ReportingServices.MSBuilder.targets

我遇到的问题是,我对rptproj文件所做的任何逻辑更改似乎都没有任何作用;导入我们的共享目标文件不会导致执行我们的任何目标,例如目标声明
BeforeTargets=“BeforeBuild”
,甚至使用
BeforeTargets=“ReportBuilderTarget”
针对ReportingServices特定目标进行设置

此外,试图设置OutputPath会导致异常奇怪的行为。声明输出路径,如下所示:

<OutputPath>$(SharedOutputPath)SSRS\$(MSBuildProjectName)</OutputPath>
这很奇怪,因为它甚至没有将众所周知的元数据标记
$(MSBuildProjectName)
解释为属性,并将其和
$(ShareDoutPath)
作为字符串文本发送到OutputPath属性中

此外,将rptproj文件保存在VS中会导致对该文件的所有自定义设置全部擦除

查看
Microsoft.ReportingServices.MSBuilder.targets
文件,它似乎对基本
Microsoft.Common.targets
文件进行了一些广泛的清理,但我无法想象它会阻止基本使用MSBuild属性或任何东西

这就是我对MSBuild的了解程度,所以我不知道从这里可以学到什么

总的来说,MSBuild对rptproj文件的支持似乎有点不成熟,但我是否遗漏了什么

是否可以自定义Visual Studio 2017 SSRS rptproj MSBuild文件

作为解决方法,yon可以使用MSBuild命令行构建项目

作为测试,我将SSRS rptproj的默认输出路径覆盖为:

<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <FullPath>Debug</FullPath>
    <OutputPath>bin\Debug\$(MSBuildProjectName)</OutputPath>
    ...
  </PropertyGroup>
然后使用MSBuild命令行生成项目:

msbuild "<ProjectPath>.rptproj" /property:Configuration=Debug
msbuild.rptproj”/property:Configuration=Debug
因此:

生成文件
build.obj
是在
bin\Debug\Report Project1
文件夹中生成的


希望这能有所帮助。

请您向我们分享一个测试样本自定义SSRS rptproj和一些构建步骤,以便我们能够重现这个问题?这非常有趣。正如您所建议的那样,我尝试在命令行中构建.rptproj和.sln,并且在该测试目标中都正确地发出了MSBuild和imported属性。无论是否相关,都有多个报告未能生成,错误信息为“错误MSB4018:“ReportBuilderTask”任务意外失败”,而在VS中生成.sln时不会发生这种情况。在Visual Studio中,似乎有一些问题在使用独立MSBulid生成时未起作用。如果我缺少一些安装组件,我将无法加载或生成此项目,对吗?@bwerks,是的,要生成此.rptproj文件,您应该下载并安装Visual Studio的SQL Server数据工具(SSDT):值得一提的是,我目前配置了这些模块,复制自VS:SQL Server数据工具中的帮助| About,15.1.61804.210(Microsoft SQL Server数据工具);SQL Server Reporting Services,14.0.1016.268(Microsoft SQL Server Reporting Services Designers版本14.0.1016.268)
  <Target Name="Test" BeforeTargets="BeforeBuild">
    <Message Text="$(OutputPath)"></Message>
  </Target>
msbuild "<ProjectPath>.rptproj" /property:Configuration=Debug