获取DLL的继承类文件名

时间:2015-07-29 09:49:45

标签: c# inheritance dll reflection

我有一个编译成DLL的抽象类(让我们称之为BaseClass.dll),它作为其他类继承的基础。这些其他类也被编译成DLL(让我们调用其中一个InheritedClass.dll),它可以用作我的主应用程序的插件,它可以调用每个插件中的相同方法作为抽象阶级迫使他们实施。

但是,有一些功能对所有插件都是通用的,所以我更喜欢我可以在基类中实现它们。这减少了冗余,也消除了在实现该功能时编写插件的人犯错的可能性。

一个这样的例子是一段需要编译的DLL文件名称的代码。一种可行的方法可能如下所示:

public string GetName()
{
    return System.IO.Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
}

问题是GetExecutingAssembly()返回当前正在运行的代码的程序集,而不是它已编译到的程序集。因此,如果我将上述函数放在BaseClass中,它将返回(BaseClass.cs),无论它编译成的DLL的名称如何。这意味着我必须将它放在InheritedClass中并且不能将它放在BaseClass中。如上所述,我想避免这种情况,因为我不想用这些通用代码来管理插件开发人员,我不想依赖这些第三方开发人员来做对了。

这甚至可能吗?有没有办法通过位于基类中的代码获取从该基类继承的DLL的名称?

1 个答案:

答案 0 :(得分:1)

GetType总是返回对象的实际类型,因此你可以使用它来找出你实际的类型,然后从那里追逐到程序集:

public string GetName()
{
    return System.IO.Path.GetFileName(GetType().Assembly.CodeBase);
}

希望您稍后会为此方法找到更好的名称。 GetName非常模糊。