VSTS构建Azure Data Lake Analytics USQL代码遇MSB4019错误
解决ADLA USQL代码VSTS构建时的MSB4019错误
这个错误本质是构建引擎找不到USQL SDK对应的Usql.targets文件,结合你给出的构建参数,我给你梳理几个关键排查和修复步骤:
1. 确保NuGet包还原步骤优先执行
USQL SDK是通过NuGet包分发的,所以在执行Visual Studio构建任务前,必须先完成NuGet包还原:
- 在VSTS构建流水线中,添加NuGet还原任务,放在Visual Studio构建任务之前。
- 配置该任务时,选择你的USQL项目文件或者解决方案文件,确保它能正确还原
Microsoft.Azure.DataLake.USQL.SDK.1.3.180223这个包。
2. 验证USQLSDKPath参数的准确性
你指定的路径$(Build.SourcesDirectory)/USQLMSBuild/packages/Microsoft.Azure.DataLake.USQL.SDK.1.3.180223/build/runtime需要确认几个点:
- 确认
USQLMSBuild目录确实存在于源代码目录下,且packages文件夹是NuGet还原后生成的。如果你的packages文件夹是在项目根目录(而非USQLMSBuild子目录),那路径要调整成$(Build.SourcesDirectory)/packages/...。 - 可以在构建任务前添加一个命令行任务,执行
dir $(Build.SourcesDirectory)/USQLMSBuild/packages /s,查看输出里是否有Usql.targets文件,以此验证路径是否正确。
3. 检查项目文件的导入语句
打开你的USQL项目文件(.usqlproj),确认导入Usql.targets的语句是使用参数而非硬编码路径:
正确的导入语句应该是:
<Import Project="$(USQLSDKPath)\Usql.targets" Condition="Exists('$(USQLSDKPath)\Usql.targets')" />
避免使用类似<Import Project="C:\Users\...\Usql.targets"的本地硬编码路径,否则在构建代理上肯定找不到。
4. 确认构建代理的环境(针对自托管代理)
如果用的是自托管构建代理,还要检查:
- 代理机器上是否安装了ADLA工具?不过既然你指定了
USQLSDKPath,理论上不需要全局安装,但要确保代理有访问NuGet源的权限,能顺利下载SDK包。 - 清理代理的工作目录,避免旧的包缓存导致路径混乱。
5. 调整Visual Studio构建任务的配置
在Visual Studio构建任务中,确保:
- 选择的是正确的USQL项目/解决方案。
- 在“MSBuild参数”里完整传递
USQLSDKPath参数,比如:
/p:USQLSDKPath=$(Build.SourcesDirectory)/USQLMSBuild/packages/Microsoft.Azure.DataLake.USQL.SDK.1.3.180223/build/runtime /p:其他参数...
注意路径分隔符用/或者转义的\\都可以,但要保持一致。
按照这些步骤排查下来,应该能解决找不到Usql.targets的问题。
内容的提问来源于stack exchange,提问作者Arunachalam
相关产品推荐
相关产品推荐

