我的公司为了构建我们的完整产品,投入了大量资金建立了一个自定义 MSBuild 目标文件库。我们源代码控制中的每个项目文件都会导入至少一个自定义目标文件,最终都会导入包含我们通用目标和属性大部分内容的核心目标文件。
最近,我们向解决方案中添加了一个新的 SSRS 项目,该项目(我相信)是在 2017 年底引入的新 rptproj 格式,特别声明了 ToolsVersion="15.0"
,并从 VS 2017 安装目录中导入了 Microsoft.ReportingServices.MSBuilder.targets
。
我遇到的问题是,对 rptproj 文件进行的任何逻辑更改似乎都没有任何作用;导入我们共享的目标文件不会执行任何我们的目标,例如声明 BeforeTargets="BeforeBuild"
的目标,甚至设置针对 ReportingServices 特定目标的目标 BeforeTargets="ReportBuilderTarget"
。
此外,尝试设置 OutputPath 会导致异常行为。声明以下 OutputPath:
<OutputPath>$(SharedOutputPath)SSRS\$(MSBuildProjectName)</OutputPath>
在构建完成后,将在项目文件目录下的以下文件夹中生成结果:
C:\workspace\solutionfolder\ReportProject1\$(SharedOutputPath)SSRS\$(MSBuildProjectFile)
这很奇怪,因为它甚至没有将众所周知的元数据标记
$(MSBuildProjectName)
解释为属性,并将其以及 $(SharedOutputPath)
一起作为字符串文字输出到 OutputPath 属性中。此外,在 VS 中保存 rptproj 文件会导致文件中所有自定义内容被完全清除。
检查
Microsoft.ReportingServices.MSBuilder.targets
文件后,似乎它对基本的 Microsoft.Common.targets
文件进行了大量修改,但我无法想象任何方式会阻止使用 MSBuild 属性或其他内容。总体而言,看起来 rptproj 文件的 MSBuild 支持有些不完善,但我是否漏掉了什么?