Bre*_*own 9 .net c# load scope assemblies
我的webapp有一个非常不愉快的问题.
该应用程序的设计如下:
- 根应用程序正在加载Flex SWF,后者又在子应用程序(MagickECB)中加载第三方Flex SWF模块.
- 两个应用程序都引用了Albums.dll,在/ bin和/ MagickECB/bin中找到的dll ,两个应用程序在IIS中共享相同的应用程序池.
编辑:这是两个项目,根应用程序项目和子应用程序项目.Subapp项目参考根应用程序项目.
从根应用程序的flex应用程序加载子应用程序的flex模块时,我们会随机获得一个强制转换错误,如下所示:
获取Photobook的配置时出错:[A] Albums.LocalizationConfiguration无法转换为[B] Albums.LocalizationConfiguration.类型A源自'Albums,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'在上下文' Default '位置' C:\ WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\magickecb\4414db97\126f5aaf\assembly\dl3\cf281292\4a6ecec8_8a7bcb01\Albums.DLL '.类型B源自位于' C:\ WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files的上下文' LoadFrom '中的'Albums,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null' \ magickecb\4414db97\126f5aaf \组件\ DL3\017fab88\a91238d1_7977cb01 \相册.".在Albums.CGlobal.GetUserLocale(String userHandle)中的Albums.LocalizationConfiguration.GetConfig()
试图调查这个问题,我发现了GetConfig方法导致返回的强制转换错误
return (LocalizationConfiguration)ConfigurationManager.GetSection("Localization/Localization");
Run Code Online (Sandbox Code Playgroud)
Web.config中的部分声明如下:(编辑:根应用程序的web.config)
<sectionGroup name="Localization">
<section name="Localization" type="Albums.LocalizationConfigurationHandler, Albums"/>
</sectionGroup>
Run Code Online (Sandbox Code Playgroud)
我的猜测是GetSection的内部代码试图在"LoadFrom"上下文中加载Albums.dll,因此导致与/ bin路径中加载的原始Albums.dll发生冲突(请参阅上下文问题)
我还注意到/ MagickECB/Bin中的其他dll也引用了Albums.dll,所以我重建所有项目,以便每个DLL引用相同版本的Albums.dll
最后,如果您检查临时文件中的dll完整路径,则扩展名是不同的(大写与小写).
关于如何解决这个问题的任何意见将不胜感激!!
Mih*_*ilo 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的路径.
| 归档时间: |
|
| 查看次数: |
13231 次 |
| 最近记录: |