在运行时满足间接引用

时间:2010-05-07 12:59:52

标签: .net visual-studio

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

我的项目编译得很好,但是当我从Visual Studio运行它时,我得到一个例外,即无法找到b.dll。在我的项目编译时,它没有被复制到bin目录。

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

  1. 使用后编译步骤将b.dll复制到bin目录
  2. 将b.dll添加到我的项目中(作为文件),如果更新
  3. ,请指定复制到输出目录
  4. 将b.dll添加为我的项目的dll引用。
  5. 使用ILMerge将b.dll与a.dll
  6. 合并

    我根本不喜欢3,因为它使b.dll对我的项目可见,其他两个看起来像黑客。我错过了其他解决方案吗?哪种“正确”的方式?依赖注入框架是否能够解析并加载b.dll?

1 个答案:

答案 0 :(得分:1)

您可以将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);
}