我在编译时收到此错误消息:
程序集'MyFramework [...]'使用'System.Web.Extensions,Version = 3.5.0.0 [...]',它有一个 高于引用程序集的版本'System.Web.Extensions,Version = 1.0.61025.0 [...]'
MyProject引用 System.Web.Extensions 1.0 和项目'MyFramework',后者又指web扩展3.5。两个引用都是 Copy local = false,Specific version = true 。
MyProject中发生错误(不在MyFramework中)。这有什么不对?
据我所知,同一个程序集的两个版本不能在同一个位置共存,这就是为什么copy local is false。
(我知道设置是蹩脚的,它是一个巨大的遗留应用程序,不能只重构任何东西。)
更新:我的项目必须有一些东西。我创建了一个示例项目(对于2.0,引用Web扩展1.0),它使用另一个示例项目(fwk 3.5,web extensions 3.5)编译好了。 (我的预期方式。)所以我基本上模拟了情况,无法重现问题。问题已变为:
可能导致上述行为的原因是什么?从技术上讲,引用同一个强命名程序集的两个版本有什么不对吗?
更新2:查看根本原因的已接受答案评论。 (“暴露的类型。”)仍然需要找到解决它的方法。
答案 0 :(得分:1)
您必须使用 extern alias 来引用同一个程序集的两个不同版本。
答案 1 :(得分:0)
您需要在App.config中使用add a <bindingRedirect>
。