针对本地项目执行U-SQL应用程序脚本时引用程序集

时间:2019-05-20 13:21:32

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

我有一个U-SQL DB项目(USQLdb),它定义了一个U-SQL数据库及其组成表,过程等。该项目还引用了两个程序集,用于其中一个存储过程。 DLL文件保存在U-SQL Data Root文件夹中名为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时有效。

出于测试目的,我添加了一个引用USQLScripts的U-SQL应用程序项目(USQLdb),并使用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文件夹中,但是脚本无法执行,因为未引用他们要对其执行的数据库。我的印象是我丢失了某些东西或遇到了错误/意外行为...

1 个答案:

答案 0 :(得分:1)

结果是我错过了一些东西。

我认为引用程序集时出错,实际上是在构建USQLdb项目时出错,导致程序集不可用,并引发了红色错误提示。

罪魁祸首是程序集的Target Framework Version高于USQLdbUSQLScripts项目。似乎只能通过在文本编辑器中手动编辑.usqldbproj文件(特别是<TargetFrameworkVersion>值)来更改此设置,因为Visual Studio UI中没有选项可以编辑此项目属性找到。

一旦我在U-SQL项目中升级了Target Framework Version以匹配程序集的程序集,现在一切都将按预期的方式构建,部署和执行。