刚从假期回来,开始对我们的应用程序做一些小改动,当我遇到这个错误时:
找不到Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener,Microsoft.WindowsAzure.Diagnostics,Version=2.1.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35类的类型。
在假期回来之前,代码运行得很好。它最后一次发表在Azure上是在3周前,现在也有了同样的问题。在本地,我试图通过删除add、添加以下配置部分来修复它:
<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会中断以下一行:
NewRelic.Api.Agent.NewRelic.IgnoreTransaction();直到两天前(根据错误日志),这已经在本地和生产中工作了。
全堆栈跟踪:
[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发布于 2017-05-22 00:11:19
虽然我在云服务包中有一个项目引用和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 as版本的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上标记为2.4.6489.4的311 as版本混为一谈。
我的项目是使用Azure PaaSDiagnostics extension ( Azure PowerShell和Azure Portal所使用的),而不是Microsoft.WindowsAzure.Plugins.Diagnostics 插件,后者是Cloud诊断的旧版本(它使用的是现在过时的“插件”模型,而不是当前的“扩展”模型)。考虑到扩展是针对任何云服务的--原来您仍然需要引用这些程序集并将它们包含在包中--扩展将不会为您完成。
但更令人困惑的是:如果您有VS云服务项目,那么如果您使用VS的云项目部署系统,那么Visual 2015甚至Visual 2017仍然使用旧的插件系统。
(考虑到“云服务”系统是遗留的,并且仅由旧的Azure“服务管理”API支持,并且不受当前一代的“资源管理”API和系统的支持,因此MS没有投资改进Visual中的云服务工具也就不足为奇了--但这种插件和扩展(诊断和远程桌面)之间的混淆将我的项目推迟了几周,而我在研究我应该做什么。
还要确保云服务对Microsoft.WindowsAzure.ServiceRuntime.dll的引用具有Copy Local = True集。这还会将文件WindowsAzureEventSource.dll和WindowsAzureTelemetryEvents.dll复制到输出中,并确保所有3个文件都包含在云服务包中。
TL;DR:
E:\approot中)
文件版本大小(字节) 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,992App.config文件,如下所示:https://stackoverflow.com/questions/20977105
复制相似问题