10
votes

Détecter si une application .NET est en cours d'exécution dans Azure ou sur un environnement non azur

Nous déplaçons actuellement des instances de notre application à Azure, mais nous maintiendrons toujours la compatibilité à l'envers avec les instances existantes qui ne sont pas azur hébergées.

Y a-t-il un bon moyen de détecter l'environnement sans installer le SDK sur le non- Server de production Azure?

J'ai essayé d'utiliser: xxx

de microsoft.windowsazure.serviceruntime, et cela fonctionne parfaitement localement et à Azure. Cependant, j'ai besoin de définir le microsoft.windowsazure.serviceruntime.dll à Copylocal, et même alors je reçois:

ne pouvait pas charger le fichier ou l'assemblage 'msshrtmi, version = 2.2.0.0, culture = neutre, PublickeyToken = 31bf3856ad364E35' ou une de ses dépendances

Il ne semble pas y avoir de package Nuget, et je ne veux pas copier manuellement la DLL msshrtmi.

peut-être peut-être un moyen de détecter sans dépendance à Microsoft .Windowsazure.serviceruntime?


0 commentaires

4 Réponses :


5
votes

Malheureusement, le moyen le plus simple de résoudre ce problème est de copier le fichier msshrtmi.dll de:

C: \ Fichiers de programme \ Microsoft SDKS \ Windows Azure \ .NET SDK \ {VERSION} \ BIN \ RUNTIMES \ BASE \ X64

Je sais que ce n'est pas très agréable de copier des dlls autour, mais c'est le seul dont vous aurez besoin pour empêcher l'erreur et sa liée à la version SDK que vous utilisez, donc ne changera pas avant de mettre à jour le SDK. .

Une alternative viable serait d'ajouter une valeur de configuration dans appsettings et d'appliquer un config transforme lorsque vous construisez l'application pour Azure.


1 commentaires

Merci Greg - j'ai fini par utiliser une transformation de configuration pour créer un commutateur. Aurait été bien s'il y avait un moyen de détecter automatiquement, mais peu importe. Merci encore pour une réponse globale!



0
votes

Vous pouvez essayer d'appeler Assembly.load sur le msshrtmi, la version = 2.2.0.0, Culture = neutre, PublickeyToken = 31bf3856ad364E35 Assemblage, et s'il échoue, n'essayez pas et n'essayez pas d'appeler le Roleenvironment. Méthode isisparable (comme vous savez que vous n'exécutez certainement pas sur Azure).

Vous pouvez également essayer d'utiliser le Machinename, car toutes les instances d'azur commencent par "RD"


2 commentaires

Une instance non azur peut également être exécutée sur une machine où les noms commencent par rd .


De plus, si je l'exécutais dans mon émulateur, le nom de la machine ne commencerait pas avec RD. Je ne veux pas rechercher des fichiers qui n'existent pas non plus, je viens de partir avec l'option de commutateur de configuration.



2
votes

Vous pouvez vérifier si la variable d'environnement Roleroot est présente. Si c'est le cas, votre application est en cours d'exécution dans un domaine Web ou travailleur.


0 commentaires

2
votes

Vous pouvez vérifier en utilisant si (roleenvironment.isemulé)


0 commentaires