2013-12-18 21 views
10

現在、アプリケーションのいくつかのインスタンスをAzureに移行していますが、Azureがホストしていない既存のインスタンスとの下位互換性は維持されます。.NETアプリケーションがAzure環境または非Azure環境で動作しているかどうかを検出

Azure以外のプロダクションサーバーにSDKをインストールせずに環境を検出する良い方法はありますか?

私が使用して試した

:Microsoft.WindowsAzure.ServiceRuntimeから

if (RoleEnvironment.IsAvailable) 

、そしてそれは完全にローカルで動作し、アズールインチしかし、私はCopyLocalにMicrosoft.WindowsAzure.ServiceRuntime.dllを設定する必要があり、その場合でも、私が取得:

ファイルまたはアセンブリ「msshrtmi、バージョン= 2.2.0.0をロードできませんでした、カルチャニュートラル、PublicKeyToken = = 31bf3856ad364e35 'またはその依存関係の1つ

NuGetパッケージがないようで、私は手動でmsshrtmi dllをコピーしたくありません。

おそらくMicrosoft.WindowsAzure.ServiceRuntimeに依存しないで検出する方法がありますか?

答えて

5

残念ながら、これを解決する最も簡単な方法からmsshrtmi.dllファイルをコピーすることです。

C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\{version}\bin\runtimes\base\x64

私はそれが周りに非常に素晴らしいコピーのDLLではありません知っているが、これはあなたが必要とする唯一のものですエラーを防止し、使用しているSDKバージョンに関連付けられているため、SDKを更新するまで変更されません。

実行可能な代替方法は、appSettingsに設定値を追加し、Azure用にアプリケーションをビルドするときにconfig transformを適用することです。

+1

おかげでグレッグを使用して確認することができます - 私は、設定スイッチを作成するために、変換を使用して終了しました。自動検出する方法があればうれしいですが、気にしないでください。包括的な回答をいただきありがとうございます。 –

0

msshrtmi, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35アセンブリでAssembly.Loadを呼び出すことができます。失敗した場合は、確かにAzureで動作していないことがわかっているので、RoleEnvironment.IsAvailableメソッドを呼び出そうとしないでください。すべてのAzureのインスタンスは、「RD」

+1

非Azureインスタンスは、名前が 'RD'で始まるマシン上で実行されているかもしれません。 – Gusdor

+0

また、エミュレータで実行していた場合、マシン名はRDで始まらなくなります。私はどちらも存在しないファイルを探す必要はないので、私は設定スイッチオプションを使用しました。 –

2

RoleRoot環境変数が存在している場合は、確認することができますから始めとして

別の方法としては、マシン名を使用して試みることができます。そうであれば、アプリケーションはWebまたはWorker Roleで実行されています。

2

あなたはif(RoleEnvironment.IsEmulated)