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

Get entry point assembly of an Azure Cloud Service

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

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

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

同一程序集还包含一个帮助程序 class,用于确定入口程序集及其版本:

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、云服务和普通应用程序。