当.Net加载程序集以及如何更改此行为时?

Ign*_*cia 1 .net assemblies loader

对于应用程序,我需要检查Crystal Reports运行时库的可用性.我试过的是:

    void CheckCrystal()
    {
        try
        {
            CrystalDecisions.Windows.Forms.CrystalReportViewer test = new CrystalDecisions.Windows.Forms.CrystalReportViewer();
            test.Dispose();
        }
        catch (System.Exception)
        {
            PTrace.Error("Some dependences needed to run Crystal Reports are not available.");
            throw;
        }
    }
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为在调用方法之前调用CheckCrystal的方法中会抛出有关缺少的Crystal依赖项的File.IOException.就像.Net知道在需要它之前需要组装.这是真的?我该如何改变这种行为?

提前致谢.

Ant*_*lev 5

这是因为代码是基于每个方法进行JIT的,因此当您第一次尝试调用时CheckCrystal(),.NET首先尝试编译它,然后加载所有必需和尚未加载的程序集.

.NET允许您在程序集解析失败时拦截.为此,请订阅AppDomain.AssemblyResolve活动.