gpt4 book ai didi

C# 错误?使用通用类型加载程序集

转载 作者:行者123 更新时间:2023-11-30 22:37:40 26 4
gpt4 key购买 nike

我有一个像这样动态加载程序集的类:

    Assembly asm = Assembly.LoadFile(args[1]);        
runner.RunTestOnAssembly(asm);

然后另一个类在该程序集上运行测试:

    foreach (var cspecType in asm.GetTypes())
{
RunTestOnType(cspecType);
}

加载的程序集引用同一文件夹 [Debug\Tests] 中的其他程序集,加载程序集的程序位于 [Debug] 文件夹中。 p>

加载的程序集(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 Runtime 无法解析您的程序集的所有依赖项。

所以你需要提供一种方法来解决这个问题。

首先,您必须像这样将解析事件添加到您的应用域

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;
}

希望这会有所帮助。

关于C# 错误?使用通用类型加载程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6395004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com