我遇到Azure Web作业的问题,它在本地运行,但它不能在Azure上运行。问题是由于:
Unhandled Exception: System.IO.FileLoadException: Could not load file or
assembly 'Newtonsoft.Json, Version=9.0.0.0, Culture=neutral,
PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located
assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040) at
Microsoft.Azure.WebJobs.ConverterManager..ctor()nat
Microsoft.Azure.WebJobs.JobHostConfiguration..ctor(String
dashboardAndStorageConnectionString)
我已安装Newtonsoft 10.0.0
(某些库需要此版本)并在app.config中设置程序集重定向但它无效。
您知道如何在Azure Web作业上启用Fusion吗?或者如何调查这类问题?
谢谢!
答案 0 :(得分:1)
由于您已安装Newtonsoft.Json 10.0.x软件包,因此项目引用属性下的Newtonsoft.Json版本将为10.0.0。根据您的错误,我假设您的App.config文件中的dependentAssembly
可能如下所示:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly>
</assemblyBinding>
您还需要检查bin文件夹,并确保Newtonsoft.Json.dll
的属性窗口中“详细信息”选项卡下的“产品版本”属性为10.0.x.x。
此外,您可以尝试显式处理Main(string [] args)方法下的AssemblyResolve
事件,如下所示:
AppDomain.CurrentDomain.AssemblyResolve += (sender, eventArgs) =>{
//eventArgs.Name -> Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
var assemblyname = eventArgs.Name.Split(',').FirstOrDefault();
if (assemblyname.Equals("Newtonsoft.Json", StringComparison.CurrentCultureIgnoreCase))
{
return System.Reflection.Assembly.Load(assemblyname);
//or just load assembly from another folder
/*
* string path = @"c:\temp\";
* return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, $"{assemblyname}.dll"));
*/
}
return null;
};
我遇到Azure Web作业的问题,它在本地运行,但它不能在Azure上运行。
您可以利用KUDU或FTP清空Web作业内容文件,然后重新部署WebJob以缩小此问题的范围。如果上述审核无法解决您的问题,您最好在您的网络工作项目中提供packages.config
,以便我们解决此问题。