支持ASP.NET\C#项目中的多个程序集

5
我们正在开发一个ASP.NET应用程序,与MS dll(Microsoft.AnalysisServices)集成存在问题。原始项目链接到随SQLServer2005提供的dll(Version=9.0.242.0)。迁移到SQLServer2008R2(version=10.0.0.0)后,我们遇到了这个问题: “无法加载文件或程序集'Microsoft.AnalysisServices,Version=9.0.242.0,Culture=neutral,PublicKeyToken=89845dcd8080cc91'或其某个依赖项。系统找不到指定的文件。” 这是可以理解的,因为我们使用一个版本编译项目,而服务器上安装了另一个版本。在开发机器上安装SQLServer2008R2后,问题得到解决。
然而,我们现在有另一个问题,需要支持SQLServer2005和SQLServer2008R2环境。我知道我们可以使用配置文件重定向dll的搜索路径(它将搜索与编译时不同版本的dll),但我似乎找不到如何在Web应用程序(在w3wp上)中使用它的说明。我们尝试使用“Specific Version”= false,但由于这是一个“Strong Name”程序集,它不能像人们想的那样工作。
我找到的相关链接是这个: http://social.msdn.microsoft.com/Forums/en-US/sqlanalysisservices/thread/47d0b992-3c10-4851-b2a5-9f72d2c0976e 请问有人能为我提供解决此问题的链接吗?
更新:我想我没有正确测试它,因为在SQLServer2008 R2中它不能为其他服务器工作。我想你不能在newVersion元素中使用范围。所以问题仍然对每个人开放!重要的是我知道我有版本9.0.242.0,但客户的版本可能是9.0.242.0或10.0.0.0。是否有一种方法可以在生产服务器上动态选择正确的程序集。
2个回答

0
你可以钩入AppDomain.CurrentDomain.AssemblyResolve并加载所需程序集。如果返回null,则会按通常方式查找它。
例如:
        AppDomain.CurrentDomain.AssemblyResolve += Resolve;

    private static Assembly Resolve(object source, ResolveEventArgs args)
    {
        if (args.Name.StartsWith("Microsoft.AnalysisServices,"))
            return Assembly.LoadFile("Microsoft.AnalysisServices.dll");
        return null;
    }

-1
尝试在你的web.config文件中添加一个bindingRedirect。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接