我有一个以前使用VS 2013在Windows 8.1上构建的WinJS项目。
最近,我通过创建一个空白的Javascript Universal Windows 10项目,然后从旧项目添加了我的所有文件,将此项目升级到Universal Windows 10。
我有Windows运行时组件以及SQLite的类库。
我添加了通用Windows运行时组件和通用类库,并将我的所有文件从旧项目复制到各个位置。
不知怎的,我设法删除了所有构建错误。
我安装了所有必需的SQLite-net,SQLite for Universal Windows Platform,Newtonsoft等。
但是当我运行应用程序并在Windows运行时组件中调用Native方法时,它会产生一些奇怪的错误:
An exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.ni.dll but was not handled in user code.
Additional information: Could not load file or assembly 'Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.
Newtonsoft版本是:9.0.1
Windows运行时组件的 project.json 文件包含以下内容:
{
"dependencies": {
"Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0",
"Newtonsoft.Json": "9.0.1"
},
"frameworks": {
"uap10.0": {}
},
"runtimes": {
"win10-arm": {},
"win10-arm-aot": {},
"win10-x86": {},
"win10-x86-aot": {},
"win10-x64": {},
"win10-x64-aot": {}
}
}
我的Visual Studio版本是:
我尝试删除所有的Newtonsoft json并重新安装但没有运气。
答案 0 :(得分:24)
我做了一个基本的演示并重现了这个问题。似乎WinRT组件未能找到Newton.Json
的正确程序集。暂时解决方法是手动添加Newtonsoft.json.dll
文件。您可以通过以下步骤实现此目的:
右键点击参考 - >添加参考 - >浏览...->找到C:\ Users \ .nuget \ packages \ Newtonsoft.Json \ 9.0.1 \ lib \ portable-net45 + wp80 + win8 + wpa81 \ Newtonsoft.json.dll->单击“添加”按钮。
重建您的Runtime Component项目并运行。这个错误应该消失了。
答案 1 :(得分:18)
我通过将Newtonsoft.Json添加到启动项目的NuGet来解决了这个问题。
答案 2 :(得分:13)
我也有同样的问题,要解决此问题,请检查项目的参考,如果 Newtonsoft.Json 的版本已更新(可能没有),然后将其删除并检入 Web.config 或 App.config ,然后更新元素 dependentAssembly ,如下所示:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
</dependentAssembly>
之后,再次重建项目( dll 将替换为正确的版本)
答案 3 :(得分:6)
前一段时间我遇到了类似的新ASP.NET Core应用程序问题。事实证明,其中一个引用的库使用的Newtonsoft.Json版本低于9.0.0.0。所以我升级了该库的版本,问题解决了。不确定你是否能够在这里做同样的事情
答案 4 :(得分:6)
我正在使用 Visual Studio 2013 Update 2 。就我而言,我在一个解决方案中有一个Web项目和一个Web Api项目和单元测试项目以及其他类库。
我花了几天时间来解决这个问题。以下是我找到的逐步解决方案。
Newtonsoft.Json
包(以获取查看&gt;其他窗口&gt;包经理控制台)。uninstall-package newtonsoft.json -force
Newtonsoft.Json
install-package newtonsoft.json
Newtonsoft.Json
时,我遇到了以下错误。'Newtonsoft.Json 10.0.3'程序包需要NuGet客户端版本 '2.12'或以上,但目前的NuGet版本是'2.8.50313.46'
工具&gt;扩展程序和更新...&gt; 在左侧窗格中..选择更新&gt; Visual Studio Gallery 。
更新 NuGet Package Manager扩展程序。按照之后的步骤进行操作。
Visual Studio将在此之后执行重新启动。
再次执行第6步。
安装完成后,将使用以下行添加packages.config
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net451" />
安装完成后,web.config将添加以下行
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly>
如果没有其他错误,它将成功执行。
答案 5 :(得分:2)
我的ASP.NET核心项目遇到了类似的问题。 会发生什么是bin / debug-folder中的.config文件生成为:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="6.0.0.0" newVersion="9.0.0.0" />
<bindingRedirect oldVersion="10.0.0.0" newVersion="9.0.0.0" />
</dependentAssembly>
如果我手动将第二个bindingRedirect更改为此,则可以正常工作:
<bindingRedirect oldVersion="9.0.0.0" newVersion="10.0.0.0" />
不确定为什么会这样。
我正在使用Visual Studio 2015和.Net Core SDK 1.0.0-preview2-1-003177。
答案 6 :(得分:2)
我在以下版本12.0.3中存在相同的问题:
Could not load file or assembly 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.
此问题仅在我的测试项目(xUnit)中,并且是由于该项目中缺少newtonsoft.json
而引起的。
重要的是,我正在测试另一个项目,该项目附加了库并且可以正常运行。
答案 7 :(得分:2)
我有一个非常相似的问题。我试图在.NET DLL中使用Newtonsoft.Json.dll,就像在计算机上的.NET EXE中成功使用它一样。我在Visual Studio 2017中使用NuGet将Newtonsoft.Json添加到MyDll.dll。 MyExecutable.exe引用MyDll.dll。从MyDll.dll中的代码调用Newtonsoft.Json方法会引发“ System.IO.FileLoadException:无法加载文件或程序集'Newtonsoft.Json,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)。
我运行Microsoft的fuslogvw.exe https://docs.microsoft.com/en-us/dotnet/framework/tools/fuslogvw-exe-assembly-binding-log-viewer来检查正在加载的内容,并发现以下内容:
LOG: Post-policy reference: Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/MyExecutable/bin/Debug/Newtonsoft.Json.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\MyExecutable\bin\Debug\Newtonsoft.Json.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: The assembly reference did not match the assembly definition found.
ERR: Run-from-source setup phase failed with hr = 0x80131040.
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
MyExecutable.exe没有对Newtonsoft.Json的引用或调用,但是在添加任何Newtonsoft.Json引用之前,我在MyExecutable源代码树的副本的bin \ Debug目录中找到了6.0.0.0 Newtonsoft.Json.dll。我的任何代码。我不知道为什么在那里有6.0.0.0 Newtonsoft.Json.dll。也许它是由MyExecutable引用的另一个DLL引用的。我通过使用NuGet向MyExecutable添加对12.0.0.0 Newtonsoft.Json的引用来避免FileLoadException。
我希望MyExecutable的App.config中的绑定重定向(如下所示)可以替代MyExecutable的Newtonsoft.Json引用,但它不起作用。 …
答案 8 :(得分:2)
需要更新 Newtonsoft.Json -Version 转到工具=> NuGet软件包管理器=>软件包管理器控制台 并在“程序包管理器控制台”窗口中键入Install-Package Newtonsoft.Json -Version 12.0.2。
答案 9 :(得分:2)
在配置文件(web.config)中为Newtonsoft.Json添加绑定重定向配置将解决此问题。
<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>
由于您所用的Newtonsoft.Json版本是9,因此会在配置中适当地更新版本。
如果此配置不起作用,请确保配置标记中的名称空间(xmlns)正确或完全删除名称空间。
答案 10 :(得分:1)
我认为AutoCAD劫持了我的。对我有用的解决方案是将其劫持回去。我是从https://forums.autodesk.com/t5/navisworks-api/could-not-load-file-or-assembly-newtonsoft-json/td-p/7028055?profile.language=en那里得到的-是的,互联网以一种神秘的方式运作。
// in your initilizer ...
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
.....
private 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;
}
答案 11 :(得分:1)
我们花了一天时间来解决这个问题。解决方案是强制您的Web服务在您的web.config文件中使用版本11.0.0。
<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>
答案 12 :(得分:0)
可以通过更新“ Newtonsoft”版本来解决问题。
在Visual Studio 2015中,可以右键单击“解决方案”,然后选择“管理解决方案的Nuget程序包”,搜索“ Newtonsoft”,选择一个最新版本,然后单击更新。
答案 13 :(得分:0)
能够通过更新我的Newton.Json版本(旧版本= 9.0.0.0到新版本11.0.0.0)usign包管理器来解决我的asp.net mvc项目中的这个问题。
答案 14 :(得分:0)
在我的情况下,配置文件web.config存在问题 在我的机器上,当我更新牛顿版本VS时自动修复我的web.config文件以指向新版本。当我将其上传到生产时,现有的web.config指向旧版本。
我更新了web.config后再次开始工作。
<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>
答案 15 :(得分:0)
我通过从解决方案中删除所有NuGet软件包并重新安装来解决了此问题。 NuGet软件包之一依赖于NewtonSoft,并且未在参考文献中显示
答案 16 :(得分:0)
当我在我的两个.netstandard库项目中添加Nuget包Newtonsoft.Json 12.0.0.2时,我遇到了这个问题,几乎花了一整天的时间来解决这个问题。
异常-:无法加载文件或程序集“ Newtonsoft.Json,版本= 12.0.0.0,区域性=中性,PublicKeyToken = 30ad4fe6b2a6aeed”。系统找不到指定的文件。
解决方案-:我必须从Nuget中删除软件包,然后转到以下位置,然后执行后续步骤-
步骤1.转到位置“ C:\ Users [UserName] .nuget \ packages \ newtonsoft.json \ 12.0.2 \ lib” 在这里,您将获得之前安装的所有Nuget版本。
第2步。由于我想在.netstandard 2.0库项目中使用它,因此我从该位置复制了“ netstandard2.0”文件夹,然后将其粘贴到我的首选位置(**我通常保留第3方dll的位置)。
第3步。现在,我从这里将DLL参考添加到我的两个项目中,这样就解决了问题。
谢谢
答案 17 :(得分:0)
从该解决方案的所有项目中删除所有 BIN 和 OBj 文件夹。此外,在使用时更新所有项目的包。删除 Package 文件夹并重建并运行。它对我有用。