2017-04-12 11 views
1

サービスのバージョンを報告したレポートサービスがあります。通常のサービスではAssembly.GetEntryAssembly()を使用できますが、これはAzureの役割では機能しません。どのようにして役割のバージョンを検出できますか?Azureクラウドサービスのエントリポイントアセンブリを取得します

共有アセンブリで
+0

「これはAzureの役割では機能しません」。あなたは 'doest work 'についてより多くの情報を提供できますか?例外やその他の有用な情報はありますか? –

+0

Azure rolは別のアプリケーションによってホストされるため、エントリアセンブリはマネージアセンブリではないため、 'null'を返します。 –

+0

解決された場合は、より多くのコミュニティがそれを得るのを助ける答えとして追加してください。 –

答えて

1

、私は次の属性定義されています:

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; 
    } 
} 

すべての私のルート:同じアセンブリはまた、エントリアセンブリとそのバージョンを決定するヘルパークラスが含まれてい

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

をアセンブリは現在AssemblyInfo.csの次の行を使用します。

[assembly: EntryAssembly] 

カスタムコードが必要ですが、システム内のすべてのエントリアセンブリが独自のものであればうまく動作します。このソリューションの主な利点は、ブートストラップとは無関係であるため、ASP.NET、クラウドサービス、および通常のアプリケーションで動作します。

関連する問題