【问题标题】:How to add a project reference when the DLL is in a different directoryDLL 位于不同目录时如何添加项目引用
【发布时间】:2013-04-02 15:25:33
【问题描述】:

我正在设置一个引用 DLL 的项目,当最终安装应用程序时,这些 DLL 将位于与我正在构建的库不同的文件夹中。这意味着应用程序目录将包含所有可执行文件,并且在一个子文件夹中将是我现在正在构建的库(实际上很多)。

我的问题是,当我指向新库项目中的引用时,这似乎强制假设引用将出现在与库相同的目录中,即我之前提到的子文件夹。但实际上,并非如此。它将被安装到主应用程序文件夹中,因为它是应用程序本身的一部分。

所以现在我的意思可能很清楚了。如何在项目中进行引用,导致库在执行时在层次结构中查找文件一个文件夹?我通过手动编辑 *.proj 文件来完成此操作,但这看起来很混乱,并且是潜在错误的根源。更不用说我必须做大约160个。工作量很大。

是否有一种纯粹的 Visual Studio 界面方式来指向引用?顺便说一句,我不能依赖 GAC 或任何类似的东西。我必须指出我自己的引用集合,这些引用只是在我从中提取的文件夹中。

提前谢谢你!

【问题讨论】:

  • 您是否尝试过从reference 添加它并在Project 选项卡上进行选择..?
  • 您应该尝试使用项目引用而不是二进制文件。
  • 这些库是可执行文件还是 DLL?将从执行程序集的角度搜索引用。
  • 右击你的项目,点击Add References,选择Project标签,浏览到你的其他项目
  • 他不是在问如何在 VS 中引用它,而是如何使部署的可执行文件在另一个文件夹中找到 dll。

标签: c# dll visual-studio-2012


【解决方案1】:

您可以在初始化期间订阅 AssemblyResolve(exe 的 Main/Web 应用程序的 Application_Start 等)并在您想要的任何路径中手动搜索,如下所示:

    AppDomain.CurrentDomain.AssemblyResolve += (s, e) =>
    {
        var basePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
        var files = Directory.GetFiles(basePath, e.Name + ".dll", SearchOption.AllDirectories);
        return files.Length == 1 ? Assembly.LoadFile(files[0]) : null;
    };

【讨论】:

    猜你喜欢
    • 2011-11-22
    • 2016-10-13
    • 2012-08-25
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多