在 CI/CD 实施期间使用 MSBuild 构建 SSIS 项目时出错

Posted

技术标签:

【中文标题】在 CI/CD 实施期间使用 MSBuild 构建 SSIS 项目时出错【英文标题】:Error while building SSIS project using MSBuild during CI/CD implementation 【发布时间】:2020-03-07 19:02:50 【问题描述】:

有人可以帮助解决我在使用 msbuild 构建 SSIS 项目时遇到的以下错误。我在机器上有 Visual Studio 2015。使用 MSBuild 14.0 "*

错误 MSB4041:项目的默认 XML 命名空间必须是 MSBuild XML 命名空间。如果项目是在 MSBuild 200 3 中创作的 格式,请补充 xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 到 元素。如果项目是在旧 1.0 或 1.2格式,请转成MSBuild 2003格式。

*" 我在网上浏览了一些文章,但找不到这种情况的解决方案。

【问题讨论】:

这不是 VS2015+msbuild14.0 支持的方案。您可以尝试使用devenv.com xx.dtproj /build 命令,或者您必须编写一个自定义脚本,如this。 @LanceLi-MSFT - 这很棒,我可以使用 devenv.com 进行构建。我看到的唯一问题是它也在构建我的 dacpac ??。我有一种解决方案,其中我有一个 DB 项目和一个 ETL 项目。我正在提供特定于 ETL 项目的路径,但它仍在构建我的数据库项目 看来对于SSIS项目,我们最好使用this format,类似的格式见here。而且这种奇怪的行为仍然会发生并影响您的构建过程,我建议您将这个问题发布到DC forum。我认为这可能是关于 SSIS 工具的一个问题。如果我的回答有帮助,请告诉我:) 感谢@LanceLi-MSFT。我将花更多时间了解所提供的详细信息。我将基于此标记答案。非常感谢您的 cmets。 很高兴知道它会有所帮助,任何更新请随时与我联系:-) 【参考方案1】:

*" 我在网上浏览了一些文章,但找不到这种情况的解决方案。

恐怕答案是否定的。目前不支持此方案(使用 msbuild 构建 SSIS 项目)。

有人在 DC 论坛上发布了此问题,请参阅 Support SSIS, s-s-rS, SSAS in MSBuild。因此,如果您尝试将 azure devops 用于 CI/CD 流程,请投票并跟踪此问题,以便在有任何更新时收到通知。如果您正在使用其他工具进行 CI/CD 流程,我建议您打开一个new feature request 以支持在本地机器中为独立的 msbuild 工具构建 SSIS。

以下两种解决方法可能会有所帮助:

1.由于你已经安装了VS2015,所以你可以试试msbuild command,而不是devenv command。

对于 VS2015,我们可以在路径 C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE 中找到 devenv.exedevenv.comdevenv.exedevenv.com 都适用于此,但请注意:直接使用 devenv.exe 会阻止输出出现在控制台上

所以devenv.xxx ... xxx.dtproj /build 可以构建 SSIS 项目。

2.我们可以在C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE中找到SQL Server Data Tools的二进制(Microsoft.SqlServer.IntegrationServices.Build.dll)。然后我们可以使用msbuild UsingTask element 调用该程序集中定义的任务。

核心是定义此语句后在我们自定义的msbuild目标中调用DeploymentFileCompilerTask任务进行SSIS build:

<UsingTask TaskName="DeploymentFileCompilerTask" AssemblyFile="C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\Microsoft.SqlServer.IntegrationServices.Build.dll" />

更多详情请参考here和here。

更新:

如果我们在同一个解决方案中有多个数据库项目和 SSIS 项目。直接使用像devenv.com xx.dtproj 这样的命令实际上将构建所有项目。

所以我建议我们这样使用命令:

    为 VS 打开开发者命令提示符 cd 到解决方案目录 使用命令:devenv.com SolutionName.sln /Build Development /Project SolutionName\xxx.dtproj /ProjectConfig Development

这实际上只会构建 SSIS 项目。

另外:如果您看到消息The project 'DatabaseProjectName.sqlproj' will close once model building has paused。如果它不影响您的构建,请忽略它。如果我们使用上面的命令,我检查是否不会真正构建数据库项目(数据库项目的输出为空)。

【讨论】:

我能够自动化所有事情,如果没有您提供的信息,这是不可能的。我使用 devenv.com 构建 ssis 和 ISDeploymentWizard.exe 进行部署。

以上是关于在 CI/CD 实施期间使用 MSBuild 构建 SSIS 项目时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何实施弹性CI/CD?你的高效DevOps团队构建指南

如何找出Visual Studio发送给MSBuild的命令?

MSBuild 在发布之前做 OctoPack

MSBuild 在调试配置中工作,但在 azure devops 中发布失败

在 GAE 项目/应用程序级别与服务/模块级别实施 CI/CD 环境的优势?

在GAE项目/应用程序级别与服务/模块级别实施CI / CD环境的优势?