获取继承的DLL文件名class
Get DLL's file name of inherited class
我有一个抽象 class 编译成一个 DLL(我们称它为 BaseClass.dll
),作为其他 classes 继承的基础。这些其他 classes 也被编译成 DLL(让我们称其中之一为 InheritedClass.dll
),它可以用作我的主应用程序的插件,它可以在每个插件中调用与抽象相同的方法 class 强制他们实施。
但是,有些功能对所有插件都是通用的,所以我更愿意在基础 class 中实现这些功能。这减少了冗余,也消除了编写插件的人在实现该功能时出错的可能性。
一个这样的例子是一段代码需要编译的DLL文件的名称。可行的方法可能如下所示:
public string GetName()
{
return System.IO.Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
}
问题是 GetExecutingAssembly()
returns 当前代码的程序集 运行,而不是它已编译到的程序集。因此,如果我将上述函数放在 BaseClass 中,它会 returns (BaseClass.cs),而不管它被编译成的 DLL 的名称。这意味着我必须将它放在 InheritedClass 中,而不能将它放在 BaseClass 中。如上所述,我想避免这种情况,因为我不想让插件的开发人员使用这些通用代码,而且我不想依赖这些第三方开发人员来完成它。
这可能吗?有没有一种方法可以通过位于基础 class 中的代码获取从该基础 class 继承的 DLL 的名称?
GetType
总是 returns 一个对象的实际类型,所以你可以用它来找出你实际是什么类型,然后从那里追到程序集:
public string GetName()
{
return System.IO.Path.GetFileName(GetType().Assembly.CodeBase);
}
希望您以后能为这个方法想出一个更好的名字。 GetName
非常模糊。
我有一个抽象 class 编译成一个 DLL(我们称它为 BaseClass.dll
),作为其他 classes 继承的基础。这些其他 classes 也被编译成 DLL(让我们称其中之一为 InheritedClass.dll
),它可以用作我的主应用程序的插件,它可以在每个插件中调用与抽象相同的方法 class 强制他们实施。
但是,有些功能对所有插件都是通用的,所以我更愿意在基础 class 中实现这些功能。这减少了冗余,也消除了编写插件的人在实现该功能时出错的可能性。
一个这样的例子是一段代码需要编译的DLL文件的名称。可行的方法可能如下所示:
public string GetName()
{
return System.IO.Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
}
问题是 GetExecutingAssembly()
returns 当前代码的程序集 运行,而不是它已编译到的程序集。因此,如果我将上述函数放在 BaseClass 中,它会 returns (BaseClass.cs),而不管它被编译成的 DLL 的名称。这意味着我必须将它放在 InheritedClass 中,而不能将它放在 BaseClass 中。如上所述,我想避免这种情况,因为我不想让插件的开发人员使用这些通用代码,而且我不想依赖这些第三方开发人员来完成它。
这可能吗?有没有一种方法可以通过位于基础 class 中的代码获取从该基础 class 继承的 DLL 的名称?
GetType
总是 returns 一个对象的实际类型,所以你可以用它来找出你实际是什么类型,然后从那里追到程序集:
public string GetName()
{
return System.IO.Path.GetFileName(GetType().Assembly.CodeBase);
}
希望您以后能为这个方法想出一个更好的名字。 GetName
非常模糊。