刚刚从假期回来,当我遇到这个错误时,他们在我们的应用程序中进行了一些小改动:
无法找到类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>
添加添加和删除对程序集的引用:
当我在本地调试项目时,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
答案 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 bytes
(34.7KB
)。它与C:\Program Files\Microsoft SDKs\Azure\.NET SDK\v2.9\bin\plugins\Diagnostics\Microsoft.WindowsAzure.Diagnostics.dll
文件相同。
MonAgentListener.dll
版本33.1.5.0
,74,448 bytes
(72.7KB
)的大小,与C:\Program Files\Microsoft SDKs\Azure\.NET SDK\v2.9\bin\plugins\Diagnostics\MonAgentListener.dll
文件相同。
请勿将此{35}版本的Microsoft.WindowsAzure.Diagnostics.dll
与C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Windows Azure Tools Diagnostics 1.0\Microsoft.WindowsAzure.Diagnostics.dll
或C:\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.dll
和WindowsAzureTelemetryEvents.dll
复制到您的输出中 - 并确保您的Cloud Service包中包含所有3个文件。
确保您在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
另外,请确保您的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>