Azure worker角色抛出System.IO.FileNotFoundException

时间:2017-02-15 20:08:26

标签: c# .net azure reflection azure-worker-roles

我重新部署了一个可操作的Azure辅助角色,其中包含一些更改,这些更改涉及引用我已设置的新类库项目,并且已开始看到辅助角色无休止地重新启动/回收。

事件查看器应用程序日志提供的帮助非常少,因为我收到的错误非常通用。

来源:.NET Runtime

  

应用程序:WaWorkerHost.exe   框架版本:v4.0.30319   描述:由于未处理的异常,进程终止。   异常信息:System.IO.FileNotFoundException   堆:      在System.ModuleHandle.ResolveType(System.Reflection.RuntimeModule,Int32,IntPtr *,Int32,IntPtr *,Int32,System.Runtime.CompilerServices.ObjectHandleOnStack)      在System.ModuleHandle.ResolveType(System.Reflection.RuntimeModule,Int32,IntPtr *,Int32,IntPtr *,Int32,System.Runtime.CompilerServices.ObjectHandleOnStack)      在System.ModuleHandle.ResolveTypeHandleInternal(System.Reflection.RuntimeModule,Int32,System.RuntimeTypeHandle [],System.RuntimeTypeHandle [])      在System.ModuleHandle.ResolveTypeHandle(Int32,System.RuntimeTypeHandle [],System.RuntimeTypeHandle [])      在System.Reflection.RuntimeModule.ResolveType(Int32,System.Type [],System.Type [])      在System.Reflection.CustomAttribute.FilterCustomAttributeRecord(System.Reflection.CustomAttributeRecord,System.Reflection.MetadataImport,System.Reflection.Assembly ByRef,System.Reflection.RuntimeModule,System.Reflection.MetadataToken,System.RuntimeType,Boolean,System.Object [ ],System.Collections.IList,System.RuntimeType ByRef,System.IRuntimeMethodInfo ByRef,Boolean ByRef,Boolean ByRef)      在System.Reflection.CustomAttribute.GetCustomAttributes(System.Reflection.RuntimeModule,Int32,Int32,System.RuntimeType,Boolean,System.Collections.IList,Boolean)      在System.Reflection.CustomAttribute.GetCustomAttributes(System.Reflection.RuntimeAssembly,System.RuntimeType)      在Microsoft.WindowsAzure.Hosts.Worker.Loader.CreateConsoleRole(Microsoft.WindowsAzure.Hosts.Worker.Parameters)      在Microsoft.WindowsAzure.Hosts.Worker.Loader.Main(System.String [])

来源:应用程序错误

  

错误应用程序名称:WaWorkerHost.exe,版本:2.7.1198.768,时间戳:0x57159090   错误模块名称:KERNELBASE.dll,版本:6.3.9600.18340,时间戳:0x57366075   异常代码:0xe0434352   故障偏移:0x0000000000008a5c   错误进程id:0xf20   错误应用程序启动时间:0x01d287c5480b416f   错误的应用程序路径:E:\ base \ x64 \ WaWorkerHost.exe   错误模块路径:D:\ Windows \ system32 \ KERNELBASE.dll   报告编号:85f9c3f7-f3b8-11e6-80c1-0004ff9da18e   错误包全名:   错误的包相关应用程序ID:

我已经搜索过这个但是没有人收到任何收到错误消息的人。

我自己的日志记录也没有提供太多的见解。我所知道的是,WorkerRole没有点击OnStart方法。

是否还有其他日志可以帮助缩小问题范围?

提前致谢。

1 个答案:

答案 0 :(得分:1)

想出来......但不是以最优雅的方式。

我继续并从Nuget更新了所有DLL的worker角色和类库项目。那里的东西解决了这个问题(我知道,不对吧?)然后我面对另一个问题:

  

应用程序:WaWorkerHost.exe   框架版本:v4.0.30319   描述:由于未处理的异常,进程终止。   异常信息:System.TypeInitializationException   堆:      在Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.Initialize()      在Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.Initialize(String [] args)      在Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.Initialize(System.String [])      在Microsoft.WindowsAzure.Hosts.Worker.Loader.CreateConsoleRole(Microsoft.WindowsAzure.Hosts.Worker.Parameters)      在Microsoft.WindowsAzure.Hosts.Worker.Loader.Main(System.String [])

为了解决这个问题,我最终偶然发现了here,这导致我this。我在Worker Role VM上下载了AzureTools,并将调试器附加到回收的WaWorkerHost进程。以下是上述链接的相关摘录:

  

AzureTools在Utils选项卡下包含一个选项,用于将调试器附加到进程的启动。切换到Utils选项卡,单击Attach Debugger,从进程列表中选择WaIISHost,然后单击Attach Debugger。您将在“当前监控”列表中看到WaIISHost显示。 AzureTools会在下次启动该过程时将WinDBG(或您在调试器位置中指定的任何内容)附加到受监视的进程。请注意,AzureTools将仅附加启动的目标进程的下一个实例 - 如果该进程当前正在运行,则AzureTools将忽略它。

通过调试,我发现我在Worker Role的app.config文件中缺少type标记的filter属性。一旦我将其添加到下面,如下所示,所有内容都已落实到位,并且成功部署了辅助角色。

<system.diagnostics>
    <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
          <filter type="" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>

请注意,要解决第一个错误,我还可以使用AzureTools并通过这种方式进行调试。在大多数情况下,我会认为这是可行的方法。事实上,在我遇到第二个错误并且我的应用程序尚未生成之前,我没有发现有关该实用程序的信息,我可以更新我的DLL引用。

希望这有助于其他人。