针对本地项目执行 U-SQL 应用程序脚本时引用程序集
Referencing Assemblies when executing U-SQL Application scripts against local-project
我有一个 U-SQL 数据库项目 (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
文件夹,但脚本无法执行,因为尚未引用它们尝试执行的数据库。我得到的印象是我要么遗漏了某些东西,要么遇到了 bug/unintended 行为...
原来我漏掉了什么。
我认为引用程序集的错误实际上是构建 USQLdb
项目时的错误,导致程序集不可用并抛出一个红色鲱鱼错误。
罪魁祸首是程序集的 Target Framework Version
高于 USQLdb
和 USQLScripts
项目。看来这只能通过在文本编辑器中手动编辑 .usqldbproj
文件(特别是 <TargetFrameworkVersion>
值)来更改,因为 Visual Studio UI 中没有选项编辑我能找到的这个项目属性。
一旦我提升 U-SQL 项目中的 Target Framework Version
以匹配程序集的项目,现在一切都按预期构建、部署和执行。
我有一个 U-SQL 数据库项目 (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
文件夹,但脚本无法执行,因为尚未引用它们尝试执行的数据库。我得到的印象是我要么遗漏了某些东西,要么遇到了 bug/unintended 行为...
原来我漏掉了什么。
我认为引用程序集的错误实际上是构建 USQLdb
项目时的错误,导致程序集不可用并抛出一个红色鲱鱼错误。
罪魁祸首是程序集的 Target Framework Version
高于 USQLdb
和 USQLScripts
项目。看来这只能通过在文本编辑器中手动编辑 .usqldbproj
文件(特别是 <TargetFrameworkVersion>
值)来更改,因为 Visual Studio UI 中没有选项编辑我能找到的这个项目属性。
一旦我提升 U-SQL 项目中的 Target Framework Version
以匹配程序集的项目,现在一切都按预期构建、部署和执行。