【发布时间】: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:\<Solution Folder>\USQLScripts\bin\Debug\DataRoot 文件夹,但脚本无法作为它们的数据库执行正在尝试执行的对象尚未被引用。我的印象是我要么遗漏了某些东西,要么遇到了错误/意外行为......
【问题讨论】:
标签: visual-studio visual-studio-2017 assemblies azure-data-lake u-sql