Хотите загрузить сборку внутри сборки во время выполнения? - PullRequest
0 голосов
/ 11 октября 2018

Я хочу использовать ApplicationTokenProvider.LoginSilentAsync (tenantId, clientCredential) .Result , который ссылается на Microsoft.Rest.Azure.Authentication Пространство имен.Это пространство имен Microsoft.Rest.Azure.Authentication находится внутри Microsoft.Rest.ClientRuntime.Azure.Authentication пространство имен (dll).

Я хочу использовать это внутри задачи сценария SSIS, поэтому янеобходимо загрузить это пространство имен во время выполнения из локального файлового хранилища, используя System.Reflection.Assembly.LoadFile ("путь") .

Из-за Microsoft.Rest.Azure.Authentication не имеетDLL файл этот Как это дает мне ошибку во время выполнения.

Пожалуйста, расскажите, как можно загрузить это пространство имен во время выполнения.

using Microsoft.IdentityModel.Clients.ActiveDirectory;

using Microsoft.Azure.Management.DataLake.Store; using Microsoft.Rest.Azure.Authentication; using System.Net.Http;

public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
    static ScriptMain()
    {
        AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
    }
    static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
       if (args.Name.Contains("Newtonsoft.Json"))
        {
            return System.Reflection.Assembly.LoadFile(@"D:\Azure_DLL\Newtonsoft.Json.dll");
        }

        if (args.Name.Contains("Microsoft.Azure.DataLake.Store"))
        {
            return System.Reflection.Assembly.LoadFile(@"D:\Azure_DLL\Microsoft.Azure.DataLake.Store.dll");
        }

        if (args.Name.Contains("Microsoft.Rest.ClientRuntime.Azure.Authentication"))
        {
            return System.Reflection.Assembly.LoadFile(@"D:\Azure_DLL\Microsoft.Rest.ClientRuntime.Azure.Authentication.dll");
        }

        if (args.Name.Contains("Microsoft.Rest.ClientRuntime"))
        {
            return System.Reflection.Assembly.LoadFile(@"D:\Azure_DLL\Microsoft.Rest.ClientRuntime.dll");
        }

        if (args.Name.Contains("System.Net.Http"))
        {
            return System.Reflection.Assembly.LoadFile(@"D:\Azure_DLL\System.Net.Http.dll");
        }

        return null;
    }
   public void Main()
    {
        // TODO: Add your code here
        // 1. Set Synchronization Context

        DataLakeStoreFileSystemManagementClient adlsFileSystemClient;

        // Portal > Azure AD > App Registrations > App > Application ID (aka Client ID)
        string clientId = "0e91";

        // Portal > Azure AD > App Registrations > App > Settings > Keys (aka Client Secret)
        string clientSecret = "6sHH8s7eT18=";

        // Portal > Azure AD > Properties > Directory ID (aka Tenant ID)
        string tenantId = "17788a7";

        // Name of the Azure Data Lake Store
        string adlsAccountName = "sjmadls08";


        string connectionString = "Data Source=SAGARM-PC;Initial Catalog=Destinantion;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;";

        var bytes = datared("Emp", connectionString);
        MemoryStream stream = new MemoryStream(bytes);

        // 1. Set Synchronization Context
        SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());

        // 2. Create credentials to authenticate requests as an Active Directory application
        var clientCredential = new ClientCredential(clientId, clientSecret);
        var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, clientCredential).Result;

        //// 2. Initialise Data Lake Store File System Client
        //adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);

        //// 3. Upload a file to the Data Lake Store
        //var destinationfilepath = "/shared/Emp_data_CurrentDate.txt";
        //   adlsFileSystemClient.FileSystem.Create(adlsAccountName, destinationfilepath, overwrite: true);
        //  adlsFileSystemClient.FileSystem.Append(adlsAccountName, destinationfilepath, stream);

        Dts.TaskResult = (int)ScriptResults.Success;
    }}

Ошибка - at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()

Кроме того, я пробовал это, но -

var DLL = Сборка.LoadFrom (@ "D: \ Azure_DLL \ Microsoft.Rest.ClientRuntime.Azure.Authentication.dll");

 Type t = DLL.GetType("Microsoft.Rest.Azure.Authentication.ApplicationTokenProvider");

var methodInfo = t.GetMethod ("LoginSilentAsync", новый тип [] {typeof(строка), typeof (ClientCredential)});

        var domain = "1dfgf88a7";
        var clientId = "0e499fdfgdf2b7131ee91";
        var clientSecret = "6vagtMMPAaZdfgdfs7eT18=";
        var clientCredential = new ClientCredential(clientId, clientSecret);


        // Gives status wwaiting for activation. 
        var a = methodInfo.Invoke(null, new object[] { domain, clientCredential });

        //Gives me the error No parameter less constructor
        object instance = Activator.CreateInstance(t);

`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...