SSIS как выполнить dll в скрипте-задании (функция SharePoint не найдена) - PullRequest
4 голосов
/ 26 июня 2019

Я не могу использовать конкретную DLL в скрипте-задаче SSIS. В c # console-project все нормально. SSIS выдает ошибку:

Ошибка: не удалось загрузить тип «Microsoft.SharePoint.Client.ClientRuntimeContext» в сборке «Microsoft.SharePoint.Client, версия = 14.0.0.0, Culture = нейтральный PublicKeyToken = ....».

Я использую Visual Studio 2017 с Datatools. Я получил библиотеки от NuGet-paket-manager и сохранил их локально на C: /

  • Microsoft.SharePoint.Client, версия 14.0.0.0, Runtime-версия v2.0.50727
  • Microsoft.SharePoint.Client.Runtime, версия 15.0.0.0, Runtime-версия v4.0.30319

Мой консольный проект - .NET 4.6, и я настроил проект SSIS также на .NET 4.6. В обоих случаях я добавил библиотеки, щелкнув правой кнопкой мыши на References> Add> Search from computer

Я только что без проблем протестировал консольный проект:


static void Main(string[] args)
{
    using (ClientContext clientContext = new ClientContext("urltomysite.com"))
    {
    }
    Console.WriteLine("finished");
}

А это код в SSIS (он похож ... Просто использует объект ClientContext:


public void Main()
{
    //Loading assemblies extra
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve2);

    try
    {
        //Testing the assembly method
        Class1.TESTIT();
    }
    catch (Exception ex)
    {
        Dts.Events.FireError(0, "Error", ex.Message, null, 0);
        Dts.TaskResult = (int)ScriptResults.Failure;
    }

}

static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
        return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine("C:/", "Microsoft.SharePoint.Client.dll"));
}

static System.Reflection.Assembly CurrentDomain_AssemblyResolve2(object sender, ResolveEventArgs args)
{
        return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine("C:/", "Microsoft.SharePoint.Client.Runtime.dll"));
}

class Class1
{
    public static void TESTIT()
    {
        using (ClientContext clientContext = new ClientContext("urltomysite.com"))
        {
        }
    }
}

1 Ответ

1 голос
/ 27 июня 2019

Я наконец-то нашел ошибку ...

Я должен был загрузить сначала

  • Microsoft.SharePoint.Client.Runtime.dll

А потом мне пришлось загрузить другую библиотеку

  • Microsoft.SharePoint.Client.dll

Итак, в Main я переключил загрузку библиотеки:

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve2);
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
...