経験されたことのある人もそこそこいると思いますがDotNet Coreのバージョンが上がるたびにちょくちょく出くわすエラーです。
ググるとだいたいがDotNet CoreのVersionに問題があって表示されるのですが、それ以外の場合もあるので対応方法をまとめておきたいと思います。
対処法
エラー画面にある通りのトラブルシューティングが一番の解決策です。
Web AppsをKuduで開いてweb.configのdebugをONにしてエラーの詳細ログを出力できるようにします。WebAppsのURLのドメインにscmを追加して開くか、AzurePortalから高度な設定を選択してKuduを開きます。
https://{Webapps名}.scm.azurewebsites.net
Kuduを開いたらDebug ConsoleからWebConfigあるフォルダまで遷移していきます。たいていsite/wwwroot/配下にあります。
WebConfigの編集画面を開いてstdoutlogEnabledをtrueに書き換えSaveを押下します。
このとき注意として、stdoutLogFilesに設定してあるパスにフォルダが作成されていないとログ出力がされません。ログが出ないときはこのパスにフォルダがあるか確認し、なければ作成するかパスを変更してください。
設定が完了したらページに戻り再読み込みを実施してログが出力されていれば成功です。ログを確認して問題点を調査しましょう。
余談
DotNet Core 3.1がGAしたため最近久しぶりにこのエラーを見ました。しかも機能追加開発の本番リリース直前で本番環境のSwap用Slotにデプロイして確認した時に発覚したので結構焦りました。
エラー内容がわからなかったので上記の対応をとり詳細ログを出力しました。ログの内容はDiagnosticsSourceっていうDLLのVersion=4.0.4.0が特定の場所にないよってエラーでした。
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly ‘System.Diagnostics.DiagnosticSource, Version=4.0.4.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51’. The system cannot find the file specified.
これはApplication Insightのバージョンが古いのが原因で発生したようです。Application InsightのVersionが2.1.1だったのですが、このバージョンが利用するSystem.Diagnostics.DiagnosticSourceのVersion=4.0.4.0が存在していないためエラーになります。実際にWWWRootの配下にあるDiagnosticSourceのVersionは4.6.0でした。
そもそもApplication InsightのVerson 2.1.1はNuget上には存在するのですが、VisualStudio上では参照できなバージョンでメインストリームには含まれて内容でした。なんでこのバージョンを利用していたのかは今では謎のベールに包まれたままです。
今回はVisualStudioでAppliaction Insightをアップデートしデプロイすることで対応しました。本番リリースは遅延しましたが何とか当日中にリカバリ―し無事リリースできました。Blue-Green-Deployにしておいてほんとうよかった。
コメント