【问题标题】:Referencing Assemblies when executing U-SQL Application scripts against local-project对本地项目执行 U-SQL 应用程序脚本时引用程序集
【发布时间】:2019-10-06 21:04:59
【问题描述】:

我有一个 U-SQL DB 项目 (USQLdb),它定义了一个 U-SQL 数据库及其组成表、过程等。该项目还引用了两个程序集,用于其中一个存储过程。 DLL 文件保存在 U-SQL 数据根文件夹内名为 assemblies 的文件夹中,并使用以下脚本在数据库中进行引用:

CREATE ASSEMBLY IF NOT EXISTS [Microsoft.Analytics.Samples.Formats]
FROM "/assemblies/Microsoft.Analytics.Samples.Formats.0.0.0.0/Microsoft.Analytics.Samples.Formats.dll";

这在部署到 Local-machine 或 Azure 时有效。

出于测试目的,我添加了一个引用 USQLdb 的 U-SQL 应用程序项目 (USQLScripts),其中包含执行存储过程的 U-SQL 脚本,每个脚本都旨在设置单元测试。

但是,当尝试针对 Local-project: USQLdb 运行这些脚本时,数据库部署会失败。从日志看是因为USQLdb部署脚本在Local-project数据根文件夹中找不到引用的程序集:

*** Error : (204,6) 'Assembly file 'C:\<Solution Folder>\USQLScripts\bin\Debug\DataRoot\assemblies/Microsoft.Analytics.Samples.Formats.0.0.0.0/Microsoft.Analytics.Samples.Formats.dll' could not be read.'

我已将 USQLScripts Test Data Source 指定为本地 U-SQL 数据根文件夹,它将找到的所有文件复制到此处的 Local-project 工作目录:

C:\<Solution Folder>\USQLScripts\bin\Debug\USQLScripts_altdata_5qktnwfj.gln\data'

尽管根据上面的错误消息,USQLdb 程序集参考试图在这里找到它们:

C:\<Solution Folder>\USQLScripts\bin\Debug\DataRoot

由于 DataRoot 文件夹在每次执行 Local-project 时都会被完全清理和重新创建,我如何才能在执行时将程序集放入 DataRoot 文件夹中,或者在不更改 U-SQL 脚本中的地址的情况下适当地引用它们之前包含,部署到 Azure 时按要求工作?


事实证明,如果我删除 USQLScripts 中的 U-SQL 数据库引用,Test Data Source 文件夹中的文件现在将复制到 C:\&lt;Solution Folder&gt;\USQLScripts\bin\Debug\DataRoot 文件夹,但脚本无法作为它们的数据库执行正在尝试执行的对象尚未被引用。我的印象是我要么遗漏了某些东西,要么遇到了错误/意外行为......

【问题讨论】:

    标签: visual-studio visual-studio-2017 assemblies azure-data-lake u-sql


    【解决方案1】:

    原来我错过了什么。

    我认为引用程序集的错误实际上是构建 USQLdb 项目时的错误,导致程序集不可用并引发错误的红鲱鱼。

    罪魁祸首是程序集的Target Framework Version 高于USQLdbUSQLScripts 项目。看来这只能通过在文本编辑器中手动编辑 .usqldbproj 文件(特别是 &lt;TargetFrameworkVersion&gt; 值)来更改,因为在 Visual Studio UI 中没有选项可以编辑我可以找到的这个项目属性。

    一旦我在 U-SQL 项目中提高了 Target Framework Version 以匹配程序集的那些,现在一切都按预期构建、部署和执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2018-02-26
      • 1970-01-01
      • 2022-10-18
      • 2019-09-15
      相关资源
      最近更新 更多