我们正在开发 ASP.NET 应用程序并且在与 MS dll (Microsoft.AnalysisServices) 集成时遇到了一些问题?
原始项目链接到 SQLServer2005 (Version=9.0.242.0) 附带的 dll。迁移到SQLServer2008R2(版本=10.0.0.0)后我们遇到了这个问题:
Could not load file or assembly 'Microsoft.AnalysisServices, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified.
这是可以理解的,因为我们用一个版本编译项目,然后另一个版本位于服务器上。在开发机器上安装 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。有没有一种方法可以在生产服务器上动态选择正确的程序集
最佳答案
您可以连接到 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;
}
关于sql-server-2008 - 支持 ASP.NET\C# 项目上的多个程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12130591/