找不到类Microsoft.WindowsAzure.Diagnostics的类型

时间:2014-01-07 16:42:29

标签: c# azure newrelic azure-diagnostics

刚刚从假期回来,当我遇到这个错误时,他们在我们的应用程序中进行了一些小改动:

  

无法找到类Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener,Microsoft.WindowsAzure.Diagnostics,Version = 2.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35。

在假期回来之前,代码一直运行良好。它是在3周前发布到Azure的,它现在在那里遇到了同样的问题。本地我尝试通过删除添加添加以下配置部分来修复它:

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

添加添加和删除对程序集的引用:

enter image description here

当我在本地调试项目时,Visual Studio会在以下行中断:

NewRelic.Api.Agent.NewRelic.IgnoreTransaction();

直到2天前,它一直在本地和生产中工作(根据错误日志)。

完整堆栈跟踪:

[ConfigurationErrorsException: Couldn't find type for class Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.]
   System.Diagnostics.TraceUtils.GetRuntimeObject(String className, Type baseType, String initializeData) +6755367
   System.Diagnostics.TypedElement.BaseGetRuntimeObject() +45
   System.Diagnostics.ListenerElement.GetRuntimeObject() +83
   System.Diagnostics.ListenerElementsCollection.GetRuntimeObject() +143
   System.Diagnostics.TraceInternal.get_Listeners() +181
   System.Diagnostics.TraceInternal.WriteLine(String message) +119
   System.Diagnostics.Trace.WriteLine(String message) +4
   NewRelic.Api.Agent.NewRelic.IgnoreTransaction() +13
   Linklicious2.Controllers.ApiController.GetLinksToPing(Boolean test) +46
   lambda_method(Closure , ControllerBase , Object[] ) +98
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +214
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
   System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +55
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +253
   System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +21
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +191
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +324
   System.Web.Mvc.Controller.ExecuteCore() +106
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +91
   System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +34
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +19
   System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +10
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +48
   System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9631764
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

2 个答案:

答案 0 :(得分:9)

如果您没有在模拟器中运行,请在此处查看我的答案 - How to solve Windows Azure Diagnostic Runtime Error (Could not create WindowsAzure.Diagnostics, Version=xx, Culture=neutral, PublicKeyToken=xx。基本上,只需添加:

<filter level="TraceEventType.Error" />
<{1>}部分中的

答案 1 :(得分:2)

虽然我在我的Cloud Service Package中有一个项目引用和Microsoft.WindowsAzure.Diagnostics.dll的本地副本,但事实证明,在添加该文件后,您还需要包中MonAgentListener.dll的副本。文件它再次开始工作。

具体来说,我使用的是Microsoft.WindowsAzure.Diagnostics.dll版本2.8.0.0,其大小为35,608 bytes34.7KB)。它与C:\Program Files\Microsoft SDKs\Azure\.NET SDK\v2.9\bin\plugins\Diagnostics\Microsoft.WindowsAzure.Diagnostics.dll文件相同。

MonAgentListener.dll版本33.1.5.074,448 bytes72.7KB)的大小,与C:\Program Files\Microsoft SDKs\Azure\.NET SDK\v2.9\bin\plugins\Diagnostics\MonAgentListener.dll文件相同。

请勿将此{35}版本的Microsoft.WindowsAzure.Diagnostics.dllC:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Windows Azure Tools Diagnostics 1.0\Microsoft.WindowsAzure.Diagnostics.dllC:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Windows Azure Tools\v2.9\Microsoft.WindowsAzure.Diagnostics.dll的311KB版本混淆,后者均标记为版本2.4.6489.4

我的项目正在使用Azure PaaSDiagnostics 扩展(Azure PowerShell和Azure门户使用的)而不是Microsoft.WindowsAzure.Plugins.Diagnostics 插件这是旧版本的Cloud Service诊断(使用现在过时的“插件”模型而不是当前的“扩展”模型)。鉴于Extensions旨在对任何Cloud Service起作用 - 事实证明您仍然需要引用这些程序集并将它们包含在您的程序包中 - 扩展程序不会为您执行此操作

但是为了让事情变得更加混乱:如果你有一个VS Cloud Service项目,那么如果使用VS的Cloud Project部署系统,Visual Studio 2015甚至Visual Studio 2017仍然会使用旧的插件系统。 / p>

(鉴于“Cloud Service”系统是遗留的,只有较旧的Azure“服务管理”API支持,并且当前的“资源管理”API和系统不支持,因此MS没有这一点并不奇怪投资改进了Visual Studio中云服务的工具 - 但是插件与扩展(针对诊断和远程桌面)之间的这种混淆使我的项目推迟了几周,而我研究了我应该做的事情。

同时确保您的Cloud Service对Microsoft.WindowsAzure.ServiceRuntime.dll的引用设置为Copy Local = True。这也会将文件WindowsAzureEventSource.dllWindowsAzureTelemetryEvents.dll复制到您的输出中 - 并确保您的Cloud Service包中包含所有3个文件。

TL; DR:

  1. 确保您在Cloud Service包文件中包含这些文件(因此在部署时将它们部署到E:\approot

    File                                       Version        Size (bytes)
    Microsoft.WindowsAzure.Diagnostics.dll           2.8.0.0        35,608
    MonAgentListener.dll                            33.1.5.0        74,448
    Microsoft.WindowsAzure.ServiceRuntime.dll   2.7.1198.768       158,624
    WindowsAzureEventSource.dll                 2.7.1198.768        83,872
    WindowsAzureTelemetryEvents.dll             2.7.1198.768        24,992
    
  2. 另外,请确保您的Cloud Service 辅助角色项目包含App.config文件:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.diagnostics>
            <trace>
                <listeners>
                    <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener,Microsoft.WindowsAzure.Diagnostics,Version=2.8.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
                        <!-- Ignore the VS-generated message "The attribute 'type' is not allowed." -->
                        <filter type="" />
                    </add>
                </listeners>
            </trace>
        </system.diagnostics>
        <startup>
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
        </startup>
    </configuration>