我遇到了一个有趣的问题。我有一个由几个组件组成的应用程序。我安装了应用程序,但忘了一个小的非必要组件。应用程序似乎启动并正常工作,直到我遇到需要使用该程序集的方法。正如您可能已经猜到的那样,我看到了"Could not load file or assembly 'Blah, Version=1.0.0.0, Culture=neutral, PublicKeyToken=Blah' or one of its dependencies. The system cannot find the file specified."
异常。
没有意外吗?是的,安装程序可以修复,我的问题消失但我想看看是否有编程方式来做到这一点。所以我尝试在try块中包装使用非必要程序集的代码,并在finally块中释放昂贵的资源,如下所示:
public void MethodA()
{
try
{
// Do stuff with non essential assembly
}
finally
{
// Release expensive resource here
}
}
认为JIT编译器将从try块中抛出,最终将控制权返回到finally块,并释放我的资源。事实证明,JIT编译器会在调用方法时抛出。
我想过在调用链中将finally块移动得更高,但是这个方法是从数百个地方调用的。我曾经想过使用Assembly.Load进行非必要的组装,但是必须使用反射的想法让我觉得很脏。
有没有办法让finally块在这种情况下执行而不重组太多或不得不洗澡,我的意思是,使用反射?
答案 0 :(得分:1)
使用非必要的程序集定义另一种方法。
从方法A中调用它。
所以:
public void MethodA()
{
try
{
MethodAImpl();
}
finally
{
}
}
答案 1 :(得分:1)
如果组件不重要,那么使用组件加载没有问题。我不明白为什么你认为它很脏。反思只是.NET的另一个方面