JIT编译缺少程序集引用

时间:2010-02-25 02:23:17

标签: .net assemblies jit

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

2 个答案:

答案 0 :(得分:1)

使用非必要的程序集定义另一种方法。

从方法A中调用它。

所以:

public void MethodA()
{
    try
    {
        MethodAImpl();
    }
    finally
    {
    }
}

答案 1 :(得分:1)

如果组件不重要,那么使用组件加载没有问题。我不明白为什么你认为它很脏。反思只是.NET的另一个方面