У меня есть плагиновую архитектуру, в которой базовый класс абстрактных определяется в основном приложении. Он использует отражение для загрузки сборок, которые получили реализации базового класса. Я хотел бы получить информацию о версии сборки, которая содержит производный объект. Вот мой базовый класс:
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, которая содержит реализацию производного класса. Я могу изменить аксессуар версии как abstract, и он работает так, как мне хотелось бы. Но тогда мне нужно добавить те же самые несколько строк кода для каждого внедряющего модуля.
Есть ли какой-то трюк для получения информации о версии производного объекта из кода в базовом классе, который существует в отдельной сборке?