Пакет служб SSIS - не удается найти Newtonsoft.Json.dll при развертывании на SQL Server - PullRequest
0 голосов
/ 08 июля 2019

Надеюсь, ты в порядке!До сих пор мне никогда не приходилось сдавать собственный вопрос, потому что я обычно находил решение моей проблемы здесь при переполнении стека.Однако на этот раз я потерян, и я надеюсь, что кто-то может мне помочь:

Я просто пытаюсь понять некоторые основы SSIS.Я уже запрограммировал пакет для загрузки данных из Web-API и помещения их в свою базу данных.Для ответа JSON от API я использую ссылку «Newtonsoft.Json.dll».Сам пакет работает нормально при выполнении в Visual Studio, однако, когда я развертываю его на SQL Server и пытаюсь выполнить его оттуда, происходит сбой.Я получаю следующее сообщение:

Insert and Update:Error: System.IO.FileNotFoundException: Could not load file or assembly 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=a3ce77dd63f8269a' or one of its dependencies. The system cannot find the file specified.
File name: 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=a3ce77dd63f8269a' ---> System.IO.FileNotFoundException: The system cannot find the file specified. (Exception from HRESULT: 0x80070002)
   at System.Reflection.RuntimeAssembly.nLoadFile(String path, Evidence evidence)
   at System.Reflection.Assembly.LoadFile(String path)
   at System.AppDomain.OnAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName)
   at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(Exception e)
   at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.PrimeOutput(Int32 outputs, Int32[] outputIDs, PipelineBuffer[] buffers)
   at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostPrimeOutput(IDTSManagedComponentWrapper100 wrapper, Int32 outputs, Int32[] outputIDs, IDTSBuffer100[] buffers, IntPtr ppBufferWirePacket)   

Итак, я понимаю, что Newtonsoft.Json.dll не может быть найден.

Я искал в интернете и обнаружил, что у нескольких людей были похожие проблемы.Я также мог бы найти темы здесь на этом сайте.Я понял, что мне нужно сделать две вещи:

  1. Строгое имя Newtonsoft.Json.dll
  2. Добавить его в GAC

К строгому имениэто, я использовал описанный здесь процесс: http://codeingaddiction.blogspot.com/2011/06/how-to-add-strong-name-to-existing-dll_16.html

Я также проверил, работает ли это нормально, используя это: https://blog.codingoutloud.com/2010/03/13/three-ways-to-tell-whether-an-assembly-dl-is-strong-named/

Затем я установил его в GAC в командной строке, как это: gacutil -i (Path) Newtonsoft.Json.dll

К сожалению, я все еще получаю то же сообщение об ошибке при попытке выполнить его через SSMS.

У кого-нибудь есть другая идея?Я очень ценю вашу поддержку!

Кристиан

1 Ответ

0 голосов
/ 08 июля 2019

Попробуйте добавить это в ваш файл проекта:

<MvcRazorExcludeRefAssembliesFromPublish>false</MvcRazorExcludeRefAssembliesFromPublish>

это будет так:

<PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    ....
    <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
    <AspNetCoreModuleModel>AspNetCoreModule</AspNetCoreModuleModel>
    <PreserveCompilationContext>true</PreserveCompilationContext>
    ....
    <MvcRazorExcludeRefAssembliesFromPublish>false</MvcRazorExcludeRefAssembliesFromPublish>
    ....
</PropertyGroup>

Я полагаю, вы используете версию .NET Core, которую ваш сервер не устанавливает. с этой опцией у вашего развернутого сервера будет папка refs, которая содержит все библиотеки, относящиеся к платформе, и работает независимо от установленной версии.

Если это все еще происходит, ошибка происходит из вашего кода, но не из среды.

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