【问题标题】:U-SQL Error while using REFERENCE ASSEMBLY使用 REFERENCE ASSEMBLY 时出现 U-SQL 错误
【发布时间】:2017-10-17 22:41:53
【问题描述】:

我使用 Azure API 创建了一个 U-SQL 库,并在 Azure 云上注册了包含所有依赖项的程序集。我在我的 U-SQL 项目中添加了这个库,并在我的 U-SQL 脚本上添加了以下行

USE master;
REFERENCE ASSEMBLY [AzureLibrary];

在使用我在库中创建的函数或方法时,我收到以下错误消息。

来自用户表达式的内部异常:无法加载文件或程序集 'Microsoft.Azure.Management.DataLake.Store,版本=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其之一 依赖关系。该系统找不到指定的文件。当前行 转储:结果:“zzz”

请帮忙,我尝试了几种方法,但每次都出现相同的消息。

========================================

我正在使用下面的代码

public static int DelTest()
        {
            int Retval = 1;
            try
            {
                var secretKey = <secret key>;
                var appId = <app id>;
                var tenantId = <tenant id>;
                string _adlsAccountName = <adls account name>;
                DataLakeStoreFileSystemManagementClient _adlsFileSystemClient;

                var context = new AuthenticationContext("https://login.windows.net/" + tenantId);
                ClientCredential clientCredential = new ClientCredential(appId, secretKey);
                var tokenResponse = context.AcquireTokenAsync("https://management.azure.com/", clientCredential).Result;
                var accessToken = tokenResponse.AccessToken;
                using (var client = new HttpClient())
                {
                    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
                    client.BaseAddress = new Uri("https://management.azure.com/");
                    // Now we can party with our HttpClient!
                }

                ServiceClientCredentials creds = new TokenCredentials(tokenResponse.AccessToken);

                _adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);
                DataLakeStoreAccountManagementClient _adlsClient = new DataLakeStoreAccountManagementClient(creds);
                _adlsFileSystemClient.FileSystem.Delete(_adlsAccountName, "/raw_files/sls_tty_typ.txt");
            }
            catch (Exception)
            {
                Retval = 0;
                throw;
            }
            return Retval;
        }

我使用“注册程序集”注册它

我在 U-SQL 脚本中使用了以下代码

USE [master];
REFERENCE ASSEMBLY [USQLCSharpProject1];

@ext =
    EXTRACT result string
    FROM "/raw_files/test_file.txt"
    USING Extractors.Csv();

@ext1 =
    SELECT result,
           USQLCSharpProject1.Class1.DelTest() AS del_success FROM @ext;

OUTPUT @ext1
TO "/raw_files/test_file1.txt"
USING Outputters.Csv();

在执行过程中,我收到以下错误消息。

请帮我解决这个问题。

请查找packages.config文件

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.Azure.Management.DataLake.Analytics" version="1.0.1-preview" targetFramework="net452" />
  <package id="Microsoft.Azure.Management.DataLake.Store" version="1.0.2-preview" targetFramework="net452" />
  <package id="Microsoft.Azure.Management.DataLake.StoreUploader" version="1.0.0-preview" targetFramework="net452" />
  <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="3.13.8" targetFramework="net452" />
  <package id="Microsoft.Rest.ClientRuntime" version="2.3.2" targetFramework="net452" />
  <package id="Microsoft.Rest.ClientRuntime.Azure" version="3.3.2" targetFramework="net452" />
  <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net452" />
</packages>

【问题讨论】:

  • 你能把你的整个 U-SQL 脚本和整个错误信息贴出来吗?
  • 错误消息告诉我们缺少程序集Microsoft.Azure.Management.DataLake.Store。你如何注册你的程序集?如果您提供有关如何注册程序集的详细步骤会更好。
  • 请查看编辑......

标签: c# azure u-sql


【解决方案1】:

对于这个问题,请检查以下场景:

1) 确保程序集的属性 Copy Local 为 true:

2) 注册程序集时,请确保选择了托管依赖项:

3) 请检查 bin/Debug 文件夹以确保该程序集存在。如果寄存器集合大于 15kb,请确保它存在于 Data Lake 存储中

【讨论】:

  • 我按照您提到的所有步骤进行操作,但仍然收到相同的错误消息。
  • 我在注册组装过程中添加了所有依赖项,但仍然出现相同的错误
  • 如果你打开USQLCSharpProject1下的packages.config,你能找到包`Microsoft.Azure.Management.DataLake.Store`吗?如果可能,请在另一个项目中尝试,重新安装程序集,然后尝试查看是否可以重现此问题。请不要忘记检查我在原始回复中提到的所有内容。
  • 请查看编辑...这是我的第二个项目。在我之前的项目中,我遵循相同的步骤并得到相同的错误。我需要更改 TargetFramework 吗?
  • 你到底有没有试过这个东西?工作正常吗?
【解决方案2】:

您能否将一个重现项目以及您对 usql (at) Microsoft 采取的确切步骤转发给我?

查看您上面的代码,我有一个警告:我看到您尝试进行直接 HTTP 调用。 ADLA 中的 U-SQL 顶点模式不允许您进行 HTTP 调用以避免意外的 DDOS 事件。因此,即使注册成功,我也怀疑您的代码实际上是否会像您预期的那样运行。

你想达到什么目的?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多