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

时间:2012-08-26 13:39:40

标签: sql-server-2008 sql-server-2005 c#-4.0 dll .net-assembly

我们正在开发一个ASP.NET应用程序,并且在与MS dll(Microsoft.AnalysisServices)集成时遇到一些问题?

原始项目与SQLServer2005(版本= 9.0.242.0)附带的dll相关联。迁移到SQLServer2008R2(版本= 10.0.0.0)后,我们遇到了这个问题:

  

无法加载文件或程序集'Microsoft.AnalysisServices,   Version = 9.0.242.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91'   或其中一个依赖项。系统找不到该文件   指定。

这是理解的,因为我们用一个版本编译项目,然后另一个版本位于服务器上。在开发机器上安装SQLServer2008R2后,问题得到了解决。

但是我们现在还有另一个问题需要支持SQLServer2005和SQLServer2008R2环境。我知道我们可以使用配置文件重定向dll的搜索路径(它将搜索与其编译的不同版本),但我似乎无法找到如何将其用于Web应用程序的说明(在w3wp)。我们尝试使用“特定版本”= false,但由于这是一个“强名称”程序集,因此无法正常运行。

我找到的相关链接是:
http://social.msdn.microsoft.com/Forums/en-US/sqlanalysisservices/thread/47d0b992-3c10-4851-b2a5-9f72d2c0976e

有人可以指导我找到解决此问题的链接吗?

更新:我想我没有正确测试它,因为它对SQLServer2008 R2中的其他服务器不起作用。我猜你不能在newVersion元素中使用range。所以这个问题仍然适合每个人! 。底线是我知道我有版本9.0.242.0但客户版本可能是9.0.242.0或10.0.0.0。有没有一种方法可以在生产服务器上动态选​​择正确的程序集

2 个答案:

答案 0 :(得分: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 :(得分:-1)

尝试将bindingRedirect添加到您的web.config。