0

嗨,我有简单的客户端向 UA 服务器写入值。我在 VS2017、Win10 NetFr 4.8 中使用 OpcLabs 库。库是从可执行文件以外的其他文件夹加载的。当 dll 在同一个文件夹中时,以下两种方法都有效,当应该触发解析器时 = dll 不在文件夹中 - 它不是。问题很简单。解析器:

private static Assembly OpcAssRes(object sender, ResolveEventArgs args)
    {
        var ProgramFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
        string OpcAsmPath = Path.Combine(ProgramFiles, "OPC Labs QuickOPC 2020.2", "Assemblies", "net47");
        var ReqAss = new AssemblyName(args.Name).Name;
        foreach (string FAssName in Directory.GetFiles(OpcAsmPath, "*.dll"))
        {
            if (Path.GetFileNameWithoutExtension(FAssName) == ReqAss)
            {
                var DLL = Assembly.LoadFrom(FAssName);
                return DLL;
            }
        }
        return null;
    }

当我想使用库中的方法实例化客户端时:

作品:

   static void Main(string[] args)
    {
        AppDomain.CurrentDomain.AssemblyResolve += OpcAssRes;
        ClCon();
    }

    static void ClCon()
    {
        var cl = new EasyUAClient();
    }

不起作用 - 立即引发异常,即找不到库。我什至尝试在解析器之前将其休眠,但它没有 - 即时异常 - 就像解析器没有被触发一样。在解析器中添加断点时,它没有到达它=它没有启动。:

       static void Main(string[] args)
    {
        AppDomain.CurrentDomain.AssemblyResolve += OpcAssRes;
        var cl = new EasyUAClient();
    }

正常吗?感谢您的建议。

4

1 回答 1

1

方法中使用的类型在调用方法之前加载。如果您将程序集解析器绑定到使用外部程序集中类型的方法中,则加载程序将不会被绑定。

于 2020-07-01T10:54:23.380 回答