我有一个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
文件夹中,但是脚本无法执行,因为未引用他们要对其执行的数据库。我的印象是我丢失了某些东西或遇到了错误/意外行为...
答案 0 :(得分:1)
结果是我错过了一些东西。
我认为引用程序集时出错,实际上是在构建USQLdb
项目时出错,导致程序集不可用,并引发了红色错误提示。
罪魁祸首是程序集的Target Framework Version
高于USQLdb
和USQLScripts
项目。似乎只能通过在文本编辑器中手动编辑.usqldbproj
文件(特别是<TargetFrameworkVersion>
值)来更改此设置,因为Visual Studio UI中没有选项可以编辑此项目属性找到。
一旦我在U-SQL项目中升级了Target Framework Version
以匹配程序集的程序集,现在一切都将按预期的方式构建,部署和执行。