我正在使用C#和VS2010。我有一个我在项目中引用的dll(作为dll引用而不是项目引用)。那个dll(a.dll)引用了我的项目没有直接使用的另一个dll,我们称之为b.dll。这些都不在GAC中。
我的项目编译得很好,但是当我从Visual Studio运行它时,我得到一个例外,即无法找到b.dll。在我的项目编译时,它没有被复制到bin目录。
将b.dll放入bin目录的最佳方法是什么,以便在运行时找到它。 我想到了四种选择。
我根本不喜欢3,因为它使b.dll对我的项目可见,其他两个看起来像黑客。我错过了其他解决方案吗?哪种“正确”的方式?依赖注入框架是否能够解析并加载b.dll?
答案 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);
}