当我遇到以下情况时,谁能告诉我组装解决的顺序是什么?
在我的 bin 中,我有我的 exe 和 2 个 dll:
- 程序集 A(版本 1)、B 和 C 合并到 X 中(因此 4 个程序集合并为 1 个)
- 组件 A(版本 2)
我所做的所有参考都不包括该UserSpecificVersion
参数。
- 现在,在我的 exe 调用期间,正在使用哪个 A?
- 此外,在程序集 B 中的调用期间,正在使用哪个 A?
如果它是相反的方式怎么办(所以首先来自B,然后是我的exe)
有这方面的任何文件吗?
当我遇到以下情况时,谁能告诉我组装解决的顺序是什么?
在我的 bin 中,我有我的 exe 和 2 个 dll:
我所做的所有参考都不包括该UserSpecificVersion
参数。
如果它是相反的方式怎么办(所以首先来自B,然后是我的exe)
有这方面的任何文件吗?
我所做的所有引用都不包括 UserSpecificVersion 参数。
我假设您实际上是指参考程序集的“特定版本”设置,并且您将其设置为 False。这在运行时无效,仅在编译时有效。添加程序集时,它记录了参考程序集的 [AssemblyVersion]。如果您稍后重新编译您的程序,但它找到了具有不同版本的参考程序集,那么它不会抱怨,而是按原样使用新程序集。这通常是有风险的,只有在丢失原始参考组件后尝试跛行并且不知道新参考组件的变化程度时,您才会这样做。始终将此设置保留为默认值 True,仅当您为自己挖了一个无法摆脱的深洞时才使用 False。
在运行时,它将始终坚持查找具有正确显示名称和从参考程序集中记录的 [AssemblyVersion] 的程序集。当您有两个具有相同名称和名称空间的程序集时,您通常会遇到麻烦,您往往需要外部别名才能将自己从那个洞中挖掘出来。使用 ILMerge 确实是一种解决方法,它会更改程序集的显示名称。但是,这仍然会给您留下相互冲突的命名空间+类型名称,尚不清楚您是如何绕过该障碍的。
所以典型的结果是,EXE 将尝试使用重命名的程序集显示名称查找 A2,而 B 将尝试查找 A1。我无法从提供的信息中以 100% 的保真度确定它。如果您有非典型案例,请使用 Fuslogvw.exe 来跟踪程序集绑定。请务必选择“记录所有绑定”选项。