.net - 在运行时满足间接引用

标签 .net visual-studio

我正在使用 C# 和 VS2010。我有一个在我的项目中引用的 dll(作为 dll 引用而不是项目引用)。那个dll(a.dll)引用了我的项目不直接使用的另一个dll,我们称之为b.dll。这些都不在 GAC 中。

我的项目编译得很好,但是当我从 Visual Studio 运行它时,我得到一个异常,即找不到 b.dll。编译我的项目时,它不会被复制到 bin 目录中。

将 b.dll 放入 bin 目录以便在运行时找到它的最佳方法是什么。
我想到了四个选项。

  • 使用后编译步骤将 b.dll 复制到 bin 目录
  • 将 b.dll 添加到我的项目(作为文件)并指定复制到输出目录如果更新
  • 添加 b.dll 作为对我的项目的 dll 引用。
  • 使用 ILMerge 将 b.dll 与 a.dll 结合

  • 我根本不喜欢 3,因为它使 b.dll 对我的项目可见,另外两个看起来像 hack。我是否缺少其他解决方案?哪个是“正确”的方式?依赖注入(inject)框架是否能够解析和加载 b.dll?

    最佳答案

    您可以添加 b.dll文件到您的项目并将复制设置为输出目录。

    如果 b.dll将已经(某处)在最终用户的计算机上,您可以处理 AssemblyResolve event并自己加载。

    如果需要,可以将其编译为项目中的嵌入式资源(添加文件,然后将 Build Action 设置为 Embedded Resource),然后将其加载到 AssemblyResolve 处理程序中)

    编辑 : 例子:

    static Assembly OnAssemblyResolve(object sender, ResolveEventArgs args) {
        if (args.Name == "b")
            return Assembly.Load(path);
    }
    

    关于.net - 在运行时满足间接引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2788676/

    相关文章:

    c# - 无法在 Visual Studio 2013 中运行单元测试

    c# - 更改重写方法中的默认代码片段

    visual-studio - ReSharper 6.1 是否适用于 Visual Studio 2012?

    c# - 如果对象是通用列表

    c# - 将项目添加到 AddIn 中的 visual studio 文件夹右键单击菜单

    c# - Visual Studio 不再显示 IntelliSense 描述

    c# - 为什么 ref 参数类型与常规类型不同?

    c# - C# 程序如何使用任何版本的 COM dll?

    .net - VS 2017 构建后事件退出代码 3,在 CMD 中有效

    c# - 动态不包含项目引用中属性的定义