【问题标题】:Build error in tfsbuild with database project使用数据库项目在 tfsbuild 中构建错误
【发布时间】:2021-09-28 00:46:38
【问题描述】:
我已经在 TFS Build 中设置了我的 .NET 项目。它在本地构建良好,但我在服务器上收到此构建错误:
未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets”。确认 声明中的路径正确,并且该文件存在于磁盘上。
我不知道它是什么,即使谷歌搜索也没有多大帮助。我的解决方案有一些数据库项目。这里有什么问题,我该如何解决?
【问题讨论】:
标签:
visual-studio-2012
tfsbuild
database-project
【解决方案2】:
我通过添加不构建 SQLPROJ 的新解决方案配置解决了类似的问题。然后,我配置了 CI-CD(Azure DevOps Pipelines)来构建该配置。
在构建的后续步骤中,我专门构建和打包 SQLPROJ。通过这个我避免了两个解决方案 - 其中一个只会在项目中使用; SQL 项目。
【解决方案3】:
我们使用ReadyRoll.MSBuild NuGet 包已经有一段时间了。 ReadyRoll 不再是 ReadyRoll 的事件,它仍在定期更新并与最新的 SCA 插件一起工作。它包含相同的构建扩展,并且可以在我们的构建代理上完美运行,无需安装任何东西。最大的问题是 .sqlproj 文件中没有 nuget 支持,这使得添加/更新包有点棘手:https://documentation.red-gate.com/rr1/installing/build-components
SQL 变更自动化文档不包含此部分,因此很难确定它会保持多长时间。
为了完整起见,从今天开始添加到您的 .sqlproj 的属性:
<ReadyRollNuGetBaseFolder>$(MSBuildThisFileDirectory)..\packages</ReadyRollNuGetBaseFolder>
<ReadyRollNuGetIsRestored Condition="$([System.IO.Directory]::GetDirectories($(ReadyRollNuGetBaseFolder), 'ReadyRoll.MSBuild.*').Length) != 0">True</ReadyRollNuGetIsRestored>
<SqlChangeAutomationTargetsPath Condition="$(ReadyRollNuGetIsRestored) == 'True'">$([System.IO.Directory]::GetDirectories($(ReadyRollNuGetBaseFolder), 'ReadyRoll.MSBuild.*')[0])\tools\ReadyRoll.Data.Schema.SSDT.targets</SqlChangeAutomationTargetsPath>
【解决方案4】:
如果 Azure DevOps 管道构建代理出现此问题,请在管道 YML 任务中使用 MSBuild@1 而不是 DotNetCoreCLI@2。它对我有用。
- task: MSBuild@1
displayName: 'Build SQL solution'
inputs:
solution: <SQL DB Solution>.sln
msbuildArchitecture: x64
msbuildArguments: '/property:DSP="Microsoft.Data.Tools.Schema.Sql.SqlAzureV12DatabaseSchemaProvider"'
configuration: 'release'