【发布时间】:2021-06-26 19:17:27
【问题描述】:
我正在开发一个服务结构应用程序并使用 Visual Studio 2019 在本地对其进行测试。该应用程序名为“DASSFHLSFApp1”,服务为 DASSFHLSFAppServiceStateless1。
当我在本地集群中运行它时,我得到了试图访问 Microsoft.WindowsAzure.Storage 类型的异常。我得到的例外是
无法加载文件或程序集“Newtonsoft.Json, Version=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, Culture=neutral, 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, Culture=neutral, 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, 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.
您可以从上面的位置看到它的选择版本 6.0.0.0。我还发现“Newtonsoft.Json 6.0.0 版”会自动获取服务项目引用的引用。即使我删除它,在重新启动 Visual Studio 时它也会自动添加
我不确定为什么版本 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”
【问题讨论】:
标签: visual-studio-2019 azure-service-fabric service-fabric-stateless assembly-binding-redirect