获取Azure云服务的入口点程序集

时间:2017-04-12 13:27:58

标签: azure azure-cloud-services

我有一个报告服务版本的报告服务。对于普通服务,我可以使用Assembly.GetEntryAssembly(),但这对Azure角色不起作用。如何检测角色的版本?

1 个答案:

答案 0 :(得分:1)

在共享程序集中,我定义了以下属性:

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

同一个程序集还包含一个帮助程序类,用于确定条目程序集及其版本:

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

我的所有根组件现在都使用AssemblyInfo.cs中的以下行:

[assembly: EntryAssembly]

虽然它需要一些自定义代码,但如果系统中的所有条目程序集都是您自己的,那么它可以很好地运行。该解决方案的主要优点是它与引导程序无关,因此它适用于ASP.NET,云服务和普通应用程序。