我已经阅读了很多对此问题的早期版本的回复,但似乎都没有。
每次在Visual Studio 2015(v14.0.25431.01 update 3)中打开脚本组件时,它都会告诉我我缺少对Newtonsoft.Json的引用。所以我进入NuGet包管理器,它要求我恢复我做的并说它成功完成。
然后我保存并尝试运行我的SSIS包并收到以下错误。
无法加载文件或程序集'Newtonsoft.Json,Version = 11.0.0.0, Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'或其中一个 依赖关系。系统找不到指定的文件。
我的packages.config文件看起来像这样。
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="11.0.1" targetFramework="net45" />
</packages>
我的app.config文件看起来像这样。
<?xml version="1.0" encoding="utf-8"?>
<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-11.0.0.0" newVersion="11.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
我可以导航到它要查找的文件夹并查看.dll文件
C:\用户\ lp1.db \应用程序数据\本地\ TEMP \ VSTA \ SSIS_SC130 \ VstaGbmf__V5kCUWonnRT2qrG_g \包\ Newtonsoft.Json.11.0.1 \ lib中\ net45 \ Newtonsoft.Json.dll
有没有其他人遇到这个持续存在的问题,即使被设置,也无法找到该文件。
答案 0 :(得分:5)
在所有项目中删除对Newtonsoft.Json的所有引用。
转到Nuget软件包管理器(右键单击解决方案),下载Newtonsoft.Json最新版本,并选择要使用的所有项目,然后重新安装。
确保packages.config具有最新版本:
<packages>
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net461" />
</packages>
重建解决方案。
答案 1 :(得分:2)
这是.NET项目中最常见的问题之一。基本上,有人直接引用了本地程序集,而不是通过NuGet管理程序包,或者使该项目可以在其他.NET版本中进行编译。 解决此问题的最佳方法是在项目引用中找到引用,将其删除,清理项目,检查DLL是否已消失,最后使用NuGet重新制作引用。
答案 2 :(得分:0)
尝试将NewtonSoft.Json
复制到SQL SSIS Runtime文件夹
C:\Program Files (x86)\Microsoft SQL Server\[SQL Server version]\DTS\Binn
示例(SQL Server 2016)
C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn
答案 3 :(得分:0)
答案 4 :(得分:0)
当我在同一个解决方案中有两个不同的项目时,我遇到了类似的问题,其中一个是指11.0.2版,另一个是指6.0.4版。如果是这种情况,请尝试为两者保持相同的版本,然后重试。
答案 5 :(得分:0)
public static void SetBindingRedirect()
{
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
}
private static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
{
if (args.Name.Contains("Newtonsoft.Json"))
{
string assemblyFileName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\Newtonsoft.Json.dll";
return Assembly.LoadFrom(assemblyFileName);
}
else
return null;
}
答案 6 :(得分:0)
将构建/发布或构建/调试中可用的 Newtonsoft.Json.dll 和 Newtonsoft.Json.xml 复制粘贴到已部署的项目文件夹