我想在我的c#应用程序中获得程序集的信息。我使用以下语句:
Assembly.GetCallingAssembly();
这可以完美地返回调用程序集的信息。
我希望与其他应用程序共享此功能,因此我将其包含在类库中的类中。
我在多个应用程序中引用这个类库。当我从我的应用程序中调用这个方法时,它返回关于类库而不是应用程序的信息。是否有一种方法,我可以改变我的上述代码返回信息的web应用程序组装,同时仍然有代码包含在类库?
与其让类库变得智能,为什么不让调用者将Assembly
作为参数传递给方法?因此,当您从某些应用程序中调用该方法时,您将传递Assembly.GetExecutingAssembly()
,并且类库中的方法现在将能够获取实际调用者的程序集。
我不确定您在反射之上提供了什么,但也许您正在抽象不需要抽象的功能。Reflections已经处理了这个问题,所以为什么不让它完成它的工作呢?
但是,如果这个API返回给您一些有用的信息(例如很好地插入数据库等),那么您的方法可能是有意义的。但是我仍然建议你重构它:
- 将此代码仅放在一个共享项目/程序集中,当需要调用该功能时只需链接该项目/程序集。需要复制代码来完成你的工作被认为是代码气味。
- 将
Assembly
对象作为参数,而不是试图确定电流集合。这将允许更大的灵活性,如果你想出一些代码,想要获得一堆其他程序集的数据,并且仍然允许你传递当前的程序集。(注:Darin已经说过了)