C#错误?通用类型的载荷装配

问题描述

| 我有一个可以像这样动态加载程序集的类:
    Assembly asm = Assembly.LoadFile(args[1]);        
    runner.RunTestOnAssembly(asm);
然后另一个类对该程序集运行测试:
    foreach (var cspecType in asm.GetTypes())
    {
        RunTestOnType(cspecType);
    }
加载的程序集引用同一文件夹[Debug \\ Tests]中的其他程序集,而加载该程序集的程序位于[Debug]文件夹中。 加载的程序集(CalcSpecAsm):
    public class CalcSpec : CSpecFacade<ICalc>
    {
        public CalcSpec()
        : base(new Calc())
        {

        }
    }
引用的程序集(CalcAsm):
    public class Calc : ICalc
    {
    /// <summary>
    /// Initalisation constructor
    /// resets the Total value.
    /// </summary>
    public Calc()
    {
        Total = 0;
    }
    .....
CSpecFacade在另一个程序集中被引用。 现在的问题是,如果我加载程序集CalcSpecAsm,则会在GetTypes()上收到程序集loaderError,它无法解析对CalcAsm程序集的引用。 问题是这行代码
public class CalcSpec : CSpecFacade<ICalc>
如果我删除通用arg ICalc并在构造函数中对其进行初始化,则它可以完美运行,但这不是我想要的。 但是:如果我将loaderAssembly程序复制到[Debug \\ Test],然后运行它,则一切正常。 如何解决问题,以及原因是什么?     

解决方法

        从其他位置加载程序集时,可能会收到错误消息,提示无法加载程序集或无法加载其依赖项。 这意味着,在加载程序集时,.Net运行时无法解析程序集的所有依赖关系。 因此,您需要提供一种解决此问题的方法。 首先,您必须像这样向您的appdomain添加resolve事件
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
然后,在这种情况下,您将必须加载依赖项。
    Assembly CurrentDomain_AssemblyResolve(object sender,ResolveEventArgs args)
    {

        //Build the path of the assembly from where it has to be loaded.                
        assemblyPath = System.IO.Path.Combine(\"your path\",args.Name.Substring(0,args.Name.IndexOf(\",\")) + \".dll\");
        assembly = Assembly.LoadFrom(assemblyPath);

        //Return the loaded assembly.
        return assembly;
    }
希望这会有所帮助。