我遇到了一个有趣的问题。我有一个由几个程序集组成的应用程序。我安装了应用程序,但忘记了一个小的非必要程序集。该应用程序似乎可以启动并正常工作,直到我找到需要使用该程序集的方法。正如您可能已经猜到的那样,我看到了"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 块在这种情况下执行而无需过多重组或不必洗澡,我的意思是,使用反射?