GetExecutingAssembly()用于不同程序集中的派生类

djs*_*djs 12 .net c# reflection .net-assembly

我有一个插件架构,其中在主应用程序中定义了一个抽象基类.它使用反射来加载具有基类的派生实现的程序集.我想获取包含派生对象的程序集的版本信息.这是我的基类:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

由于基类是主应用程序集的一部分,因此它始终返回正在执行的应用程序的版本信息,而不是包含派生类实现的.dll.我可以将版本访问器更改为abstract,并且它可以按照我的意愿运行.但是我需要在每个实现插件中添加相同的几行代码.

是否有一些技巧从一个单独的程序集中存在的基类中的代码中获取派生对象的版本信息?

Dan*_*ite 24

this.GetType().Assembly改用.


Sim*_*ger 8

如果从您的抽象类调用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);
        }
    }
Run Code Online (Sandbox Code Playgroud)