このエラーの原因の 1 つは、含まれているクラウド プロジェクトを実行するのではなく、Web ロール自体を実行することです。これが問題である場合は、Web ロールではなく、クラウド プロジェクトがデバッグ用のスタートアップ プロジェクトとして設定されていることを確認することで、問題を解決できます。
Web ロールを独自に定義する ASP.NET プロジェクトを実行することは可能であり、場合によっては便利です。これは、Azure コンピューティング エミュレーターで実行するよりもはるかに高速です。また、昇格した VS を実行しなくてもプロジェクトを開発できる場合もあります。また、エミュレーターによって Visual Studio が無効なメモリ アクセス エラーを報告する傾向があることがわかりました。その場合は、VS を再起動する必要があります。Web ロールを直接実行すると、これらの問題をすべて回避できます。
ただし、これが機能しない可能性があることがいくつかあります。説明した例外は、これらの問題の1つの症状です。Web ロールWeb.config
に Azure の構成が含まれてDiagnosticMonitorTraceListener
いる (および Web ロールを作成するときに Visual Studio が既定でそれを追加する) 場合、エミュレーターの外部で実行すると、トレース出力を生成しようとする最初のものが、説明したエラーでクラッシュします。たまたま、 から設定を取得すると、これが行われるようにCloudConfigurationManager
見えます。
ちなみに、これはに特有のものではありませんCloudConfigurationManager
。実行しているのは、トレース出力を生成することだけです。VS は、すべてのトレース出力を Azure 診断リスナーに送信するように Web ロールを構成します。このリスナーは、コンピューティング エミュレーターまたは実際の Azure インスタンスでのみ実行できるため、トレース出力を生成しようとする最初のものはクラッシュします。CloudConfigurationManager
たまたまトレース出力が生成されるため、一般的な候補であり、通常は役割が開始される初期に使用されます。ただし、原則として、トレース出力を生成するものはすべて、この例外にヒットする可能性があります。
これを回避する簡単な方法は、関連するセクションを構成ファイルから削除することです。新しい Web ロールを作成すると、Visual Studio<system.diagnostics>
によって、Azure 診断リスナーに送信されるように既定のトレース出力を構成するセクションが追加されます。それをコメントアウトするだけです。これにより、コンピューティング エミュレーターを使用せずに、Visual Studio で Web ロールを直接デバッグできます (ロール環境にいることに依存することを他に何もしていないと仮定します)。
もちろん、これの問題は、Azure で実行しているときに診断トレースを取得できなくなることです。これを解決する 1 つの方法は、関連する構成をWeb.config.Release
ファイルに移動することです (必要なxdt:
属性を追加します)。
この変更により、ローカル コンピューティング エミュレーターの使用時に Azure 診断トレース リスナーの実行も停止します。(トレース メッセージは引き続きデバッガーに表示されるため、それほど問題ではありません。これは、実際に実行する場合のように、テーブル ストレージにコピーされたトレースの永続的なコピーを取得できないことを意味します。) これを修正する明白な方法同様の変更を行うWeb.config.Debug
(またはエミュレーターでリリース ビルドを実行する) ように見えますが、問題があります。明らかに、クラウド プロジェクトは、エミュレーター用にパッケージ化するときに、既定で構成ファイルの変換を適用しません。幸いなことに、これを修正できます: http://blog.hill-it.be/2011/03/07/no-web-config-transformation-in-local-azure/コンピューティング エミュレーターでローカル デバッグ用に変換を有効にする方法を示します。(ちなみに、VS 内から直接 ASP.NET プロジェクトをデバッグする場合、変換は適用されません。)