【发布时间】:2011-05-06 14:03:47
【问题描述】:
我的 web 应用遇到了一个非常不愉快的问题。
应用程序设计如下:
- 根应用正在加载 Flex SWF,而后者又会在子应用 (MagickECB) 中加载第 3 方 Flex SWF 模块。
- 两个应用程序都引用 Albums.dll,在 /bin 和 /MagickECB/bin 中找到 dll,并且两个应用程序在IIS。
EDIT :这是两个项目,根应用项目和子应用项目。子应用项目参考根应用项目。
当从根应用的弹性应用加载子应用的弹性模块时,我们随机得到一个如下的转换错误:
获取时出错 相册配置: [A]相册.LocalizationConfiguration 不能转换为 [B]专辑。本地化配置。 A型起源于'专辑, 版本=1.0.0.0,文化=中性, PublicKeyToken=null' 在上下文中 '默认'在位置 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET 文件\magickecb\4414db97\126f5aaf\assembly\dl3\cf281292\4a6ecec8_8a7bcb01\Albums.DLL'。 B型起源于'专辑, 版本=1.0.0.0,文化=中性, PublicKeyToken=null' 在上下文中 'LoadFrom' 在位置 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET 文件\magickecb\4414db97\126f5aaf\assembly\dl3\017fab88\a91238d1_7977cb01\Albums.dll'。 在 Albums.LocalizationConfiguration.GetConfig() 在 Albums.CGlobal.GetUserLocale(字符串 用户句柄)
试图调查这个问题,我发现了导致转换错误返回的 GetConfig 方法
return (LocalizationConfiguration)ConfigurationManager.GetSection("Localization/Localization");
Web.config 中的部分声明如下:(EDIT : root app's web.config)
<sectionGroup name="Localization">
<section name="Localization" type="Albums.LocalizationConfigurationHandler, Albums"/>
</sectionGroup>
我的猜测是 GetSection 的内部代码会尝试在“LoadFrom”上下文中加载 Albums.dll,因此会导致与 /bin 路径中加载的原始 Albums.dll 发生冲突 (see context problematics)
我还注意到 /MagickECB/Bin 中的其他 dll 也引用了 Albums.dll,因此我重建了所有项目,以便每个 DLL 引用相同版本的 Albums.dll
最后,如果你检查临时文件中的 dll 完整路径,扩展名是不同的(大写与小写)..
任何有关如何解决此问题的意见将不胜感激!
【问题讨论】:
标签: c# .net scope load assemblies