无法在本地集群中使用正确的 NewtonSoft.Json 版本运行 Service Fabric

如何解决无法在本地集群中使用正确的 NewtonSoft.Json 版本运行 Service Fabric

我正在开发一个服务结构应用程序并使用 Visual Studio 2019 在本地对其进行测试。应用程序名为“DASSFHLSFApp1”,服务为 DASSFHLSFAppServiceStateless1。

当我在本地集群中运行它时,我遇到尝试访问 Microsoft.WindowsAzure.Storage 类型的异常。我得到的例外是

无法加载文件或程序集“Newtonsoft.Json,版本=10.0.3.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed”或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (来自 HRESULT 的异常:0x80131040)

当我使用 fuslogvw.exe 时,我发现 Service Fabric 正在尝试从

加载 NewtonSot.Json dll

服务包代码如下图来自fuslogvw.exe

Pre-bind state information ===
LOG: displayName = Newtonsoft.Json,Version=10.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed
 (Fully-specified)
LOG: Appbase = file:///C:/SfDevCluster/Data/_App/_Node_0/DassFHLSFApp1Type_App87/DassFHLSFAppServiceStateless1Pkg.Code.1.0.0/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = DassFHLSFAppServiceStateless1.exe
Calling assembly : Microsoft.WindowsAzure.Storage,Version=9.3.2.0,PublicKeyToken=31bf3856ad364e35.

LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\SfDevCluster\Data\_App\_Node_0\DassFHLSFApp1Type_App87\DassFHLSFAppServiceStateless1Pkg.Code.1.0.0\DassFHLSFAppServiceStateless1.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Redirect found in application configuration file: 10.0.0.0 redirected to 10.0.3.0.
LOG: Post-policy reference: Newtonsoft.Json,Version=10.0.3.0,PublicKeyToken=30ad4fe6b2a6aeed
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/SfDevCluster/Data/_App/_Node_0/DassFHLSFApp1Type_App87/DassFHLSFAppServiceStateless1Pkg.Code.1.0.0/Newtonsoft.Json.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\SfDevCluster\Data\_App\_Node_0\DassFHLSFApp1Type_App87\DassFHLSFAppServiceStateless1Pkg.Code.1.0.0\Newtonsoft.Json.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: Newtonsoft.Json,Version=6.0.0.0,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.

如您所见,它从上面的位置选择了 6.0.0.0 版本。我还发现“Newtonsoft.Json version 6.0.0”会自动获取服务项目引用的引用。即使我删除它,在重新启动visual studio时它也会自动添加

enter image description here

我不知道为什么 6.0.0 版本被添加到项目并移动到 C:/SfDevCluster/Data/_App/_Node_0/DassFHLSFApp1Type_App87/DassFHLSFAppServiceStateless1Pkg.Code.1.0.0/Newtonsoft.Json.DLL。

我在 app.config 文件添加了绑定重定向

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-10.0.3.0" newVersion="10.0.3.0" />
  </dependentAssembly>

但是当我尝试安装 nuget NewtonSoft.Json 10.0.3 时,它也因错误而失败

未能添加对“Newtonsoft.Json”的引用。 无法修改源自导入文件“.......props”文件的评估对象。

如何解决这些问题,以便能够在本地运行我的 SF 代码进行测试,并且不会出现“无法加载文件或程序集‘NewtonSoft.Json 版本 10.0.30”的异常

解决方法

nutget 包“WindowsAzure.Storage”已被弃用并被拆分为更小的包。请参阅nuget docu。也许更新到较新的软件包,例如“Microsoft.Azure.Storage.Blob”可以解决问题。

Newtonsoft 6.0.0 不存在(请参阅 list of versions)。也许值得一试安装6.0.8。所以,一步一步找出问题;-)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?