SSIS как выполнить dll в задаче-скрипте (функция SharePoint не найдена)

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

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

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

  • Microsoft.SharePoint.Client, версия 14.0.0.0, версия среды выполнения v2.0.50727
  • Microsoft.SharePoint.Client.Runtime, версия 15.0.0.0, версия среды выполнения v4.0.30319

Мой консольный проект - .NET 4.6, и я установил проект SSIS также на .NET 4.6. В обоих случаях я добавил библиотеки, щелкнув правой кнопкой мыши на Ссылки> Добавить> Поиск с компьютера.

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


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"))
        {
        }
    }
}


person Community    schedule 26.06.2019    source источник
comment
Я думаю, что из сообщения об ошибке вы используете SQL Server 2014 и Net Library 4.0. Версия v4.0.30319 является целевой библиотекой Net Library 4.0. Исходя из прошлого опыта, библиотека SQL должна соответствовать версии, установленной на машине. NuGet, вероятно, скомпилирован с другой версией. Поэтому я подозреваю, что вам нужно перекомпилировать NuGet на вашем компьютере. Так что попробуйте Build: Clean Solution и Recompile. Я бы сделал копию папки NUGET Bin, если файлы были вручную помещены в папку.   -  person jdweng    schedule 26.06.2019
comment
Попробуйте использовать следующий код return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(@"C:\", "Microsoft.SharePoint.Client.dll")); и убедитесь, что dll находится на C:   -  person Hadi    schedule 26.06.2019
comment
Ваша версия SharePoint server?   -  person Fox    schedule 27.06.2019
comment
@jdwengIm Я открыл VSTA, открыл PM-консоль и набрал Get-Project –All | Add-BindingRedirect. Он просто показывает мне один из пакетов Microsoft.SharePoint.Client.Runtime. Я почистил, перестроил и сохранил раствор. При следующем запуске пакета ssis снова происходит сбой. Я установил SSIS-проект на SQL-Server 2016: та же проблема. Есть ли у вас еще какие-нибудь советы?   -  person    schedule 27.06.2019
comment
@Hadi Спасибо, но это не сработало.   -  person    schedule 27.06.2019
comment
@Fox Извините, но это важно? Консоль-проект работает нормально. Я этого не знаю, извини.   -  person    schedule 27.06.2019


Ответы (1)


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

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

  • Microsoft.SharePoint.Client.Runtime.dll

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

  • Microsoft.SharePoint.Client.dll

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

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve2);
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
person Community    schedule 27.06.2019