簡體   English   中英

檢測.NET應用程序是在Azure中還是在非Azure環境中運行

[英]Detecting if a .NET app is running in Azure or on a non-Azure environment

我們目前正在將我們的應用程序的一些實例移動到Azure,但仍將保持與非Azure托管的現有實例的向后兼容性。

是否有一種很好的方法來檢測環境而無需在非Azure生產服務器上安裝SDK?

我嘗試過使用:

if (RoleEnvironment.IsAvailable)

來自Microsoft.WindowsAzure.ServiceRuntime,它在本地和Azure中都可以很好地工作。 但是,我需要將Microsoft.WindowsAzure.ServiceRuntime.dll設置為CopyLocal,即使這樣我也得到:

無法加載文件或程序集'msshrtmi,Version = 2.2.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依賴項之一

似乎沒有NuGet包,我不想手動復制msshrtmi dll。

也許有一種方法可以在不依賴Microsoft.WindowsAzure.ServiceRuntime的情況下進行檢測?

不幸的是,解決此問題的最簡單方法是從以下位置復制msshrtmi.dll文件:

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

我知道復制DLL並不是很好,但這是你需要防止錯誤的唯一一個,它與你正在使用的SDK版本相關聯,因此在你更新SDK之前不會改變。

一個可行的替代方案是在appSettings添加配置值,並在為Azure構建應用程序時應用配置轉換

您可以驗證RoleRoot環境變量是否存在。 如果是,則您的應用程序在Web或輔助角色中運行。

您可以使用if(RoleEnvironment.IsEmulated)進行檢查

您可以嘗試在msshrtmi, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35程序集上msshrtmi, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 Assembly.Load,如果失敗則不要嘗試調用RoleEnvironment.IsAvailable方法(因為你知道你肯定是不在Azure上運行)。

或者,您可以嘗試使用machinename,因為所有Azure實例都以“RD”開頭

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM