microsoft management manage c# .net azure azure-role-environment azure-service-runtime

c# - management - Detectando si una aplicación.NET se está ejecutando en Azure o en un entorno que no sea de Azure



panel azure login (4)

Desafortunadamente, la manera más fácil de resolver esto es copiar el archivo msshrtmi.dll desde:

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

Sé que no es muy bueno copiar archivos DLL, pero este es el único que necesitarás para evitar el error, y está vinculado a la versión del SDK que estás utilizando, por lo que no cambiará hasta que actualices el SDK.

Una alternativa viable sería agregar un valor de configuración en appSettings y aplicar una transformación config al construir la aplicación para Azure.

Actualmente estamos trasladando algunas instancias de nuestra aplicación a Azure, pero mantendremos la compatibilidad con las instancias existentes que no están alojadas en Azure.

¿Hay una buena manera de detectar el entorno sin instalar el SDK en el servidor de producción que no es de Azure?

He intentado usar:

if (RoleEnvironment.IsAvailable)

desde Microsoft.WindowsAzure.ServiceRuntime, y funciona perfectamente localmente, y en Azure. Sin embargo, necesito configurar Microsoft.WindowsAzure.ServiceRuntime.dll en CopyLocal, e incluso entonces obtengo:

No se pudo cargar el archivo o ensamblado ''msshrtmi, Version = 2.2.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'' o una de sus dependencias

No parece haber un paquete NuGet, y no quiero copiar manualmente el dll msshrtmi.

Tal vez hay una forma de detectar sin la dependencia de Microsoft.WindowsAzure.ServiceRuntime?


Puede intentar llamar a Assembly.Load en el msshrtmi, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 , y si falla, no intente llamar al método RoleEnvironment.IsAvailable (ya que sabe que definitivamente no se ejecuta en Azure).

Alternativamente, podría intentar usar el nombre de máquina, ya que todas las instancias de Azure comienzan con "RD"


Puede verificar si la variable de entorno RoleRoot está presente. Si es así, su aplicación se está ejecutando en un rol web o trabajador.


Puede verificar usando if(RoleEnvironment.IsEmulated)