C# A 类型不能转换为 B 类型(InvalidCastException)...上下文 hell ?

标签 c# .net scope load assemblies

我的网络应用程序遇到了一个非常不愉快的问题。

应用程序设计如下:

  • 根应用正在加载一个 Flex SWF,而后者又会在子应用 (MagickECB) 中加载第 3 方 Flex SWF 模块。
  • 两个应用程序都引用了 Albums.dll,在 /bin/MagickECB/bin 中找到了 dll,并且两个应用程序共享相同的应用程序池IIS。

编辑:这是两个项目,根应用项目和子应用项目。子应用项目引用根应用项目。

当从根应用程序的 flex 应用程序加载子应用程序的 flex 模块时,我们随机得到如下转换错误:

There was an error getting configuration of Photobook: [A]Albums.LocalizationConfiguration cannot be cast to [B]Albums.LocalizationConfiguration. Type A originates from 'Albums, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'Default' at location 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\magickecb\4414db97\126f5aaf\assembly\dl3\cf281292\4a6ecec8_8a7bcb01\Albums.DLL'. Type B originates from 'Albums, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'LoadFrom' at location 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\magickecb\4414db97\126f5aaf\assembly\dl3\017fab88\a91238d1_7977cb01\Albums.dll'. at Albums.LocalizationConfiguration.GetConfig() at Albums.CGlobal.GetUserLocale(String userHandle)

尝试调查此问题,我发现导致返回转换错误的 GetConfig 方法

return (LocalizationConfiguration)ConfigurationManager.GetSection("Localization/Localization");

Web.config 中的部分声明如下:(编辑:根应用程序的 web.config)

<sectionGroup name="Localization"> 
    <section name="Localization" type="Albums.LocalizationConfigurationHandler, Albums"/>
</sectionGroup>

我的猜测是 GetSection 的内部代码试图在“LoadFrom”上下文中加载 Albums.dll,因此导致与加载在/bin 路径 (see context problematics) 中的原始 Albums.dll 发生冲突

我还注意到/MagickECB/Bin 中的其他 dll 也引用了 Albums.dll,因此我重建了所有项目,以便每个 DLL 都引用相同版本的 Albums.dll

最后,如果您检查临时文件中的 dll 完整路径,扩展名是不同的(大写与小写)..

任何有关如何解决此问题的意见将不胜感激!!

最佳答案

仔细检查你的引用,如果你比较你的两个 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 的路径。

关于C# A 类型不能转换为 B 类型(InvalidCastException)...上下文 hell ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122788/

相关文章:

支持字符串资源的 c# 自定义属性不加载本地化资源

c# - 使用 NUnit 按顺序运行 TestFixtures

c# - 内存映射文件是否比命名管道更快?

javascript - 无法从 CasperJS 中的 thenEvaluate() 函数内访问变量

javascript - 全局变量在下面的 javascript 函数中未定义

javascript - 这个函数有闭包吗?

c# - 将字符串类型的方法参数限制为给定类的 const 字段

c# - 在 ASP.NET 中动态生成 PNG 的好方法是什么?

.net - 从 XmlSchema .net 的输出中删除 docType 声明

.net - 什么是全局方法?