USQL msbuild - 组合构建输出

3
我正在按照此链接上的说明进行操作:https://blogs.msdn.microsoft.com/azuredatalake/2017/10/24/continuous-integration-made-easy-with-msbuild-support-for-u-sql-preview/。该链接指出:
在从命令行或VSTS任务运行MSBuild之后,U-SQL项目中的所有脚本都会被构建,并输出到“构建输出路径/脚本名称/脚本名称.usql”中的单个文件中。您可以将此组合U-SQL脚本复制到发布文件夹以进行进一步部署。
在我的Visual Studio项目(.usqlproj)中,我有多个.usql脚本:
- CreateDatabase.usql - CreateTable.usql - CreateTvf.usql
当我执行清理和msbuild命令,然后检查bin\debug文件夹时,我只得到CreateDatabase.usql,而其中只包含CREATE DATBASE语句。根据博客的说法,我认为所有3个usql脚本都应该合并成一个组合usql脚本。我在我的机器上从命令提示符执行了msbuild命令。
msbuild TheProject\TheProject.usqlproj /t:Clean /t:Rebuild /property:USQLSDKPath=C:\TheProject\src\packages\Microsoft.Azure.DataLake.USQL.SDK.1.3.1019-preview\build\runtime,USQLTargetType=Merge

我正在使用 Visual Studio 2017 版本 15.4.3 和 Azure Data Lake 工具版本 2.3.0000.1。是否有什么操作不当?
2个回答

1
由于一些历史原因,为确保在usqlproj中的所有文件都被构建,条件在USqlSDKBuild.targets中定义如下: <ItemGroup> <FileToBuild Condition="'$(JustOneFile)' == '' and '$(Build_all_files_in_this_project)' != 'true'" Include="$(ActiveFile)" /> <FileToBuild Condition="'$(JustOneFile)' != '' " Include="$(JustOneFile)" /> <FileToBuild Condition="'$(Build_all_files_in_this_project)' == 'true'" Include="Build_all_files_in_this_project" /> </ItemGroup> 对于当前的预览版,请在命令行中添加"/property:Build_all_files_in_this_project=true,JustOneFile=''"以确保构建所有脚本。我们将在后续版本中更新此内容,使其更简单易用。

0

命令msbuild TheProject\TheProject.usqlproj /t:Clean /t:Rebuild /property:USQLSDKPath=C:\TheProject\src\packages\Microsoft.Azure.DataLake.USQL.SDK.1.3.1019-preview\build\runtime,USQLTargetType=Merge 实际上是构建您选择的脚本。

如果您在VS中选择了CreateDatabase.usql,则会在命令行中构建脚本CreateDatabase.usql

如下面的示例所示,由于选择了test.usql,因此执行msbuild命令时,它将仅构建test.usql。就像点击USQL项目中的构建按钮一样。

enter image description here

如果您想要构建 USQL 项目下的所有脚本,您应该在 VS 中选择“构建所有脚本”按钮。

enter image description here

enter image description here


  1. 是的,右键单击“构建所有脚本”将构建此项目中的所有文件。我们如何在msbuild命令行中获得相同的行为?
  2. 这仍然没有生成一个单一的组合U-SQL脚本 - 我可以在发布和进一步部署中使用 - 如博客中所述。实际上,它在bin \ Debug文件夹中生成了3个不同的.usql脚本。或者我误解了博客?
- databash
该文章还提到:“将输出到单个文件,位于“生成输出路径/脚本名称/脚本名称.usql””。为了正确理解它,我在文章下添加了一条评论,您可以跟进。 - Marina Liu
2
这里似乎存在对“合并”目标的误解。 “合并”目标不是将当前目录中的所有U-SQL脚本合并为一个更大的脚本。相反,它是“编译代码后端文件,如.cs,并将生成的用户定义代码库内联到U-SQL脚本中。”因此,如果您的项目中有3个U-SQL脚本,则合并编译结果将是3个不同的文件在3个目标文件夹中。 - Yu Dong Yang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接