我可以在同一个项目中引用两个版本的dll而不将它们放在GAC中吗?

我可以在同一个项目中引用两个版本的dll而不将它们放在GAC中吗?

谢谢

你有两个问题。 第一个是让你的应用程序编译。 你有两个包含具有相同命名空间名称和类型名称的类型的程序集引用,编译器将不知道选择哪一个。 您可以使用“extern alias”来解决这个问题,它允许您重命名其中一个程序集的命名空间。 查看此问题以获得进一步的帮助

第二个问题是你问的问题。 如果没有GAC,您需要帮助CLR找到正确的DLL。 您必须将DLL放在单独的目录中,比如构建目录的子目录,以便CLR找不到它们。 使用post build事件创建此目录并将DLL复制到其中。 给他们不同的名字。

然后实现AppDomain.CurrentDomain.AssemblyResolve事件。 当CLR找不到您隐藏的DLL时,它将触发它。 使用Assembly.LoadFrom()加载并返回它要求的程序集。 e.Name属性具有完整的程序集名称,使用AssemblyName类来解析该字符串并检索Version属性。

引用程序集而不将其放入GAC意味着将dll复制到项目的bin文件夹中。 并且你不能在bin文件夹中有两个同名的dll。

你不能两次引用同一个组件。