我有一个插件体系结构,其中在主应用程序中定义了一个抽象基类。它使用反射来加载具有基类派生实现的程序集。我想获取包含派生对象的程序集的版本信息。这是我的基类:
namespace My.AppNameSpace
{
public abstract class BaseClass
{
public Version Version
{
get
{
Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion;
return new Version(version);
}
}
public abstract void DoStuff();
}
}
由于基类是主应用程序集的一部分,因此它始终返回执行应用程序的版本信息,而不是包含派生类实现的.dll。我可以将Version访问器更改为abstract
,它可以随心所欲地工作。但是,我需要将这些相同的几行代码添加到每个实现插件中。
从存在于单独程序集中的基类中的代码中获取派生对象的版本信息有什么技巧吗?
请改用this.GetType().Assembly
。
如果从抽象类调用this.GetType()
,则将获得实际类的运行时类型。从那里,您可以获得该类型的Assembly
属性。
public Version Version
{
get
{
Assembly assembly = this.GetType().Assembly;
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion;
return new Version(version);
}
}