使用REFERENCE ASSEMBLY时出现U-SQL错误

时间:2016-12-26 11:28:32

标签: c# azure u-sql

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

行下面
USE master;
REFERENCE ASSEMBLY [AzureLibrary];

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

  

用户表达式的内部异常:无法加载文件或程序集   'Microsoft.Azure.Management.DataLake.Store,Version = 1.0.0.0,   Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其中一个   依赖。该系统找不到指定的文件。当前行   dump:结果:“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;
        }

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

enter image description here

我在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();

执行期间,我收到以下错误消息。

enter image description here

请帮我解决此问题。

请查找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>

2 个答案:

答案 0 :(得分:1)

对于此问题,请检查以下方案:

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

enter image description here

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

enter image description here

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

enter image description here

答案 1 :(得分:0)

你可以转发一个repro项目以及你带给usql(at)Microsoft的确切步骤吗?

查看上面的代码,我有一点需要注意:我看到你尝试直接进行HTTP调用。 ADLA中的U-SQL顶点模式不允许您进行HTTP调用以避免意外的DDOS事件。因此,即使注册能够正常工作,我也怀疑您的代码实际上是否符合预期。

你想要达到什么目标?