我们有一个使用Report Viewer 2010的Click-once WinForms应用程序。这些程序集是私下部署的 - 也就是说,我们不会GAC它们(AFAIK,这是最好的做法,尽管我可能错了)。< / p>
我们遇到了以下问题。我们需要Report Viewer文件版本10.0.40219.1(我相信这是来自VS2010 SP1) - 它有一些错误修复,RTM版本(10.0.30319.1)没有。但是,我们部署的一些机器,“坏”(旧)组件已经在GAC中(例如,如果用户安装了VS2010 RTM或任何其他决定GAC报告查看器的软件 - TFS就是这样做的,我相信)。不幸的是,两个程序集的程序集版本相同,10.0.0.0。因此,CLR加载程序总是通过本地部署的加载程序选择GAC程序集。
据我了解,无论如何,所有Assembly.Load ...()方法都将首先从GAC加载,因此手动预加载程序集并不能真正帮助我们。我能看到的唯一解决方案是GAC我们正在部署的ReportViewer程序集 - 但这听起来不是正确的事情。
问题:我们确保加载正确的Report Viewer程序集的正确方法是什么?
谢谢,
戴夫。
答案 0 :(得分:0)
Assembly.LoadFile(path)将加载你想要的那个。
编辑:错误。答案 1 :(得分:0)
现在你可以玩粗糙了。如果您完全信任,可以挂钩CreateFileW以打开本地副本而不是GAC中的副本;但是,如果它已经不能工作的话。
您当然可以挂钩注册表功能,以便扫描GAC,因为它找不到它。
如果有问题的程序集是纯托管代码,您可以通过ildasm运行它,更改私钥,通过ilasm运行,签名并链接到它。