我的公司对自定义 MSBuild 目标文件库进行了大量投资,我们用它来构建完整的产品。我们在源代码管理中拥有的每个项目文件都会导入至少一个自定义目标文件,这些文件最终都会导入一个包含大量通用目标和属性的核心目标文件。
最近,我们在我们的解决方案中添加了一个新的 SSRS 项目,这个项目(我相信)是 2017 年底引入的新 rptproj 格式 - 特别是,它声明ToolsVersion="15.0"
和进口Microsoft.ReportingServices.MSBuilder.targets
从 VS 2017 安装目录中。
我遇到的问题是,我对 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 属性或任何内容的基本使用。
这就是我的 MSBuild 知识的范围,所以我不知道从哪里获取它。
总体而言,MSBuild 对 rptproj 文件的支持似乎有些不成熟,但我是否遗漏了一些东西?