web-dev-qa-db-ja.com

クラスMicrosoft.WindowsAzure.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

プロジェクトをローカルでデバッグすると、VisualStudioは次の行で中断します。

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
17
Jeremy Boyd

エミュレーターで実行していない場合は、my SO answer here - Windows Azure Diagnostic Runtime Error(Could not create WindowsAzure.Diagnostics、Version = xx、 Culture = neutral、PublicKeyToken = xx 。基本的に、次を追加するだけです。

<filter level="TraceEventType.Error" />

の中に <listeners><add> セクション。

9
viperguynaz

クラウドサービスパッケージに_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_と同じファイルです。

この35KBバージョンの_Microsoft.WindowsAzure.Diagnostics.dll_を、バージョン_2.4.6489.4_としてマークされている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バージョンと混同しないでください。

私のプロジェクトでは、_Microsoft.WindowsAzure.Plugins.Diagnostics_ pluginの代わりにAzure PaaSDiagnosticsextension(AzurePowerShellとAzurePortalが使用するもの)を使用しています。古いバージョンのCloudService診断(現在の「拡張」モデルの代わりに、現在は廃止されている「プラグイン」モデルを使用します)。拡張機能がクラウドサービスに対して機能することを意図していることを考えると、これらのアセンブリを参照してパッケージに含める必要があることがわかります-拡張機能はそれを行いません

ただし、さらに混乱させるために、VSクラウドサービスプロジェクトがある場合、Visual Studio2015およびVisualStudio 2017でさえ、古いプラグインシステムを使用します。 VSのクラウドプロジェクト展開システムを使用します。

(「クラウドサービス」システムはレガシーであり、古いAzureの「サービス管理」APIでのみサポートされ、現世代の「リソース管理」APIとシステムではサポートされていないことを考えると、MSが改善に投資していないのは当然のことです。 Visual Studioのクラウドサービス用のツールですが、プラグインと拡張機能(診断とリモートデスクトップの両方)の間のこの混乱により、何をすべきかを調査している間、プロジェクトが数週間遅れました。

また、クラウドサービスの_Microsoft.WindowsAzure.ServiceRuntime.dll_への参照に_Copy Local = True_が設定されていることを確認してください。これにより、ファイル_WindowsAzureEventSource.dll_および_WindowsAzureTelemetryEvents.dll_も出力にコピーされ、3つのファイルすべてがクラウドサービスパッケージに含まれるようになります。

TL; DR:

  1. これらのファイルがクラウドサービスパッケージファイルに含まれていることを確認します(デプロイ時に_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. また、クラウドサービスワーカーロールプロジェクトに次の_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>
    _
5
Dai