【问题标题】:USQL msbuild - composite build outputUSQL msbuild - 复合构建输出
【发布时间】:2017-11-13 17:27:40
【问题描述】:

我正在按照此链接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
  • 创建Tvf.usql

当我执行 clean 和 msbuild 然后检查 bin\debug 文件夹时,我得到的只是 CreateDatabase.usql 并且其中只有 CREATE DATBASE 语句。根据博客,我原以为所有 3 个 usql 脚本都会合并为 1 个复合 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

我做错了什么?

【问题讨论】:

    标签: msbuild azure-pipelines u-sql


    【解决方案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=''”以确保所有脚本都已构建。我们将在以后的版本中使用更简单的条件对其进行更新。

    【讨论】:

      【解决方案2】:

      命令 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 项目的 Build 按钮一样。

      如果你想构建USQL项目下的所有脚本,你应该选择VS中的Build All Scripts按钮。

      【讨论】:

      • 1) 是的,右键Build All Scripts 将Build_all_files_in_this_project。我们如何在 msbuild 命令行 中获得相同的行为? 2) 这仍然没有产生单个复合 U-SQL 脚本——我可以在发布和进一步部署中使用它——如博客中所述。它实际上在 bin\Debug 文件夹中生成 3 个不同的 .usql 脚本。还是我误解了博客?
      • 文章还说“在“构建输出路径/脚本名称/脚本名称.usql”处输出到单个文件。为了正确理解,我在文章下面加了评论,大家可以跟进。
      • 这里似乎对“Merge”目标有误解。 “合并”的目标不是将当前目录下的所有 U-SQL 脚本合并成一个更大的脚本。相反,它是“编译代码隐藏文件,如 .cs,并将生成的用户定义代码库内联到 U-SQL 脚本中”。因此,如果项目中有 3 个 U-SQL 脚本,则合并后的编译结果将是 3 个目标文件夹中的 3 个不同文件。
      猜你喜欢
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 2017-07-27
      • 2019-05-22
      • 2020-06-01
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      相关资源
      最近更新 更多