我正在使用 C# 和 VS2010。我有一个在我的项目中引用的 dll(作为 dll 引用而不是项目引用)。那个dll(a.dll)引用了我的项目不直接使用的另一个dll,我们称之为b.dll。这些都不在 GAC 中。
我的项目编译得很好,但是当我从 Visual Studio 运行它时,我得到一个异常,即找不到 b.dll。编译我的项目时,它不会被复制到 bin 目录中。
将 b.dll 放入 bin 目录以便在运行时找到它的最佳方法是什么。
我想到了四个选项。
我根本不喜欢 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/