SSIS包-部署到SQL Server时找不到Newtonsoft.Json.dll

时间:2019-07-08 14:25:44

标签: c# json sql-server ssis

我希望你一切都好!到目前为止,我再也不需要提交自己的问题,因为我通常会在堆栈溢出时找到问题的解决方案。但是,这次我迷路了,希望有人能帮助我:

我只是在尝试一些SSIS基础知识。我已经编写了一个程序包,可以从Web-API下载数据并将其放入数据库中。对于来自API的JSON响应,我使用“ 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 :(得分:0)

尝试将其添加到您的项目文件中:

<MvcRazorExcludeRefAssembliesFromPublish>false</MvcRazorExcludeRefAssembliesFromPublish>

它将是这样的:

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

我猜您正在使用服务器未安装的.NET Core版本。使用此选项,您部署的服务器将具有一个名为refs的文件夹,其中包含所有平台相关的库,并且可以与已安装的版本独立工作。

如果仍然发生,则错误来自您的代码,而不是环境。