我的网络应用程序出现了一个非常不愉快的问题。
该应用程序的设计如下:
- 根应用程序正在加载Flex SWF,后者又在子应用程序中加载第三方Flex SWF模块( MagickECB )。
- 两个应用程序都引用 / Albases.dll ,在 / bin 和 / MagickECB / bin 中找到dll,两个应用程序在IIS中共享相同的应用程序池。
编辑:这是两个项目,根应用程序项目和子应用程序项目。子应用程序项目参考根应用程序项目。
从根应用程序的flex应用程序加载子应用程序的flex模块时,我们会随机获得一个强制转换错误,如下所示:
收到错误 Photobook的配置: [A] Albums.LocalizationConfiguration 无法施展 [B] Albums.LocalizationConfiguration。 A型来自'专辑, 版本= 1.0.0.0,文化=中立, 上下文中的PublicKeyToken = null' 位置处的“默认” “的 C:\ Windows \ Microsoft.NET \框架\ V2.0.50727 \临时 ASP.NET 文件\ magickecb \ 4414db97 \ 126f5aaf \组件\ DL3 \ cf281292 \ 4a6ecec8_8a7bcb01 \ Albums.DLL ”。 B型来自'专辑, 版本= 1.0.0.0,文化=中立, 上下文中的PublicKeyToken = null' 位置处的“ LoadFrom ” “的 C:\ Windows \ Microsoft.NET \框架\ V2.0.50727 \临时 ASP.NET 文件\ magickecb \ 4414db97 \ 126f5aaf \组件\ DL3 \ 017fab88 \ a91238d1_7977cb01 \ Albums.dll ”。 在 Albums.LocalizationConfiguration.GetConfig() 在Albums.CGlobal.GetUserLocale(String userHandle)
尝试调查此问题,我发现GetConfig方法导致返回强制转换错误
return (LocalizationConfiguration)ConfigurationManager.GetSection("Localization/Localization");
Web.config中的部分声明如下:(编辑:root app的web.config)
<sectionGroup name="Localization">
<section name="Localization" type="Albums.LocalizationConfigurationHandler, Albums"/>
</sectionGroup>
我的猜测是GetSection的内部代码尝试在“LoadFrom”上下文中加载Albums.dll,因此导致与/ bin路径中加载的原始Albums.dll冲突(see context problematics)< / p>
我还注意到/ MagickECB / Bin中的其他dll也引用了Albums.dll,所以我重建了所有项目,以便每个DLL引用相同版本的Albums.dll
最后,如果你检查临时文件中的dll完整路径,扩展名是不同的(大写与小写)..
非常感谢有关如何解决此问题的任何意见!!
答案 0 :(得分:10)
仔细检查您的参考文献,如果您比较两个dll位置它们是不同的(扩展大写与小写不是问题):
临时ASP.NET文件\ magickecb \ 4414db97 \ 126f5aaf \ assembly \ dl3 \ cf281292 \ 4a6ecec8_8a7bcb01 \ Albums.DLL
临时ASP.NET文件\ magickecb \ 4414db97 \ 126f5aaf \ assembly \ dl3 \ 017fab88 \ a91238d1_7977cb01 \ Albums.dll
可能意味着您引用了两个不同的文件 - 可能将一个作为项目引用,另一个作为文件引用。当您尝试构建有关参考的Web应用程序时,您是否有任何警告?
上面文件夹中的 编辑: __AssemblyInfo__.ini
文件将为您提供复制Albums.dll的路径。
答案 1 :(得分:0)
如果没有您的问题的解释,我建议在GAC注册该程序集并从那里使用它。