我有一个报告服务版本的报告服务。对于普通服务,我可以使用Assembly.GetEntryAssembly()
,但这对Azure角色不起作用。如何检测角色的版本?
答案 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,云服务和普通应用程序。