获取 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、云服务和普通应用程序。
我有一个报告服务版本的报告服务。对于普通服务,我可以使用 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、云服务和普通应用程序。