2017-04-12 3 views
1

J'ai un service de reporting qui a signalé la version du service. Pour les services normaux, je peux utiliser Assembly.GetEntryAssembly(), mais cela ne fonctionne pas pour les rôles Azure. Comment puis-je détecter la version du rôle?Obtenir l'assemblage d'un point d'entrée d'un service cloud Azure

+0

'cela ne fonctionne pas pour les rôles Azure'. Pourriez-vous fournir plus d'informations sur 'doest work'. Y a-t-il une exception ou d'autres informations utiles? –

+0

Étant donné qu'Azure rol est hébergé par une autre application, l'assembly d'entrée n'est pas un assembly géré, il renvoie donc 'null'. –

+0

Si cela est résolu, veuillez ajouter une réponse qui aidera plus de communautés à l'obtenir. –

Répondre

1

Dans un assemblage partagé, j'ai défini l'attribut suivant:

[AttributeUsage(AttributeTargets.Assembly)] 
public sealed class EntryAssemblyAttribute : Attribute 
{ 
} 

Le même ensemble contient également une classe d'aide qui détermine l'ensemble de l'entrée et sa version:

public static class EntryAssemblyHelper 
{ 
    public static bool IsEntryAssembly(this Assembly assembly) 
    { 
     return assembly.GetCustomAttributes(typeof(EntryAssemblyAttribute), false).Any(); 
    } 

    public static Assembly GetEntryAssembly() 
    { 
     return AppDomain.CurrentDomain.GetAssemblies().SingleOrDefault(IsEntryAssembly); 
    } 

    public static Version GetEntryAssemblyVersion() 
    { 
     return GetEntryAssembly()?.GetName().Version; 
    } 
} 

Toute ma racine Les assemblages utilisent maintenant la ligne suivante dans le AssemblyInfo.cs:

[assembly: EntryAssembly] 

Bien qu'il nécessite du code personnalisé, il fonctionne bien si tous les assemblys d'entrée de votre système sont les vôtres. Le principal avantage de cette solution est qu'elle n'est pas liée au programme d'amorçage, elle fonctionne donc avec ASP.NET, les services cloud et les applications normales.