来自其他位置的 .NET 参考 dll

2024-05-07

我正在根据第三方程序中包含的一些 DLL 制作一个程序。我不被允许自己分发这些 DLL。必须安装第三方程序才能使我的程序运行。

我怎样才能引用这些DLL?我通过程序设置的注册表项知道它们的确切位置。

我尝试在 Project->References 中添加文件并将 CopyLocal 设置为 false,但是当我启动时,我收到 FileNotFoundException“无法加载文件或程序集”。

我尝试向 AppDomain.CurrentDomain.AssemblyResolve 添加一个事件并加载其中的文件,但问题是我在程序启动之前就收到了异常。即使我在第一行放置断点,在命中断点之前也会抛出异常。


From C# 3.0 简而言之,第三版,约瑟夫和本·阿尔巴哈里 (Joseph and Ben Albahari) 着 http://oreilly.com/catalog/9780596527570,p。 557-558:

在基本文件夹之外部署程序集

有时您可能会选择将程序集部署到应用程序基目录以外的位置 [...] 为了完成这项工作,您必须协助 CLR 查找基本文件夹之外的程序集。最简单的解决方案是处理AssemblyResolve event.

(我们可以忽略这样一个事实,即在您的情况下,除您之外的其他人正在部署程序集。)

你试过了。但稍后出现了一条非常重要的线索。阅读两段代码注释:

public static void Loader
{
    static void Main(string[] args)
    {
        AppDomain.CurrentDomain.AssemblyResolve += FindAssem;

        // We must switch to another class before attempting to use
        // any of the types in C:\ExtraAssemblies:
        Program.Go();
    }

    static Assembly FindAssem(object sender, ResolveEventArgs args)
    {
        string simpleName = new AssemblyName(args.Name).Name;
        string path = @"C:\ExtraAssemblies\" + simpleName + ".dll";

        if (!File.Exists(path)) return null;
        return Assembly.LoadFrom(path);
    }
}

public class Program
{
    public static void Go()
    {
        // Now we can reference types defined in C:\ExtraAssemblies
    }
}

如你所见,解析外部程序集的类不得引用任何外部 DLL 中的任何类型anywhere.如果是这样,代码执行将在您之前停止AssemblyResolve永远有机会跑步。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自其他位置的 .NET 参考 dll 的相关文章

随机推荐