Задача сценария служб SSIS не может найти Newtonsoft.Json - PullRequest
3 голосов
/ 08 марта 2019

Я установил dll в GAC, даже обновил dll, чтобы установить его в GAC, но я получаю эту ошибку:

"Не удалось загрузить файл или сборку" Newtonsoft.Json, Version = 4.5.0.0, Культура = нейтральный, PublicKeyToken = 30ad4fe6b2a6aeed 'или одна из его зависимостей. Системе не удалось найти указанный файл. ":" Newtonsoft.Json, Версия = 4.5.0.0, Культура = нейтральный, PublicKeyToken = 30ad4fe6b2a6aeed "}

App.config

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

Расположение GAC:

C: \ Windows \ Microsoft.NET \ Assembly \ GAC_MSIL \ Newtonsoft.Json \ v4.0_12.0.0.0__30ad4fe6b2a6aeed \ Newtonsoft.Json.dll

Я также скопировал dll в C: \ Windows \ System32, но при попытке добавить его в качестве ссылки из этогоМестоположение визуальных студий не видит.

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Чтобы исправить эту проблему, я добавил новую задачу сценария и открыл внутри нее слепок.

Я установил пакет Microsoft.AspNet.WebApi.Client, а затем из этого пакета добавил в мой GAC библиотеки System.Net.Http и Newtonsoft.Json.

После этого я ссылался на эти новые библиотеки из того места, в которое он их добавил, и это исправило проблему.

Это будет работать, только если вы сможете установить dll в GAC на сервере / компьютере, на котором работает пакет служб SSIS.

1 голос
/ 08 марта 2019

Попробуйте использовать делегат ResolveEventHandler для загрузки .dll, когда возникает ошибка, после того как она не найдена.Это может идти прямо над Main() методом.

static ScriptMain()
{
 AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}
static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    if (args.Name.ToUpper().Contains("NEWTONSOFT"))
    {
   string path = @"C:\DLL File Path\";
   return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, "Newtonsoft.Json.dll"));
    }
    return null;
}
public void Main()
{
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...