可移植类库中的FileNotFoundException?

时间:2011-12-19 19:11:09

标签: c# portable-class-library

我有3个程序集,一个WP7应用程序(目标为7.0),一个Web服务项目(运行4.0),以及一个可移植类库(由模板构建,目标是WP7,SL4和.NET 4.0),其中包含一个在前两个之间使用的常见类型。

在本地运行时(在IIS Express中),工作正常,但是当针对Web服务程序集的已部署实例运行时(在我几乎无法控制的远程IIS服务器上)失败,并出现以下异常:

  

System.IO.FileNotFoundException:无法加载文件或程序集   'System.Xml.Serialization,Version = 4.0.0.0,Culture = neutral,   PublicKeyToken = b77a5c561934e089'或其依赖项之一。该   系统找不到指定的文件。文件名:   'System.Xml.Serialization,Version = 4.0.0.0,Culture = neutral,   PublicKeyToken = b77a5c561934e089'---> System.IO.FileNotFoundException:找不到   无法加载文件或程序集'System.Xml.Serialization,   Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,   Retargetable = Yes'或其依赖项之一。系统找不到   指定的文件。文件名:'System.Xml.Serialization,   Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,   可重定向=是

堆栈跟踪表明它是第一次调用PCL,如果是类型加载失败,这将是有意义的。

如果我删除对PCL程序集的引用然后将密钥类文件添加到两个程序集,那么工作正常,但我想避免这种代码重复...所以问题是:为什么是这件事发生了吗?如何配置PCL以书面形式运行?

编辑:更多信息......我的PCL使用XmlSerializer,它存在于桌面上的System.Xml.dll中,以及Silverlight中的System.Xml.Serialization.xml中...在完整的桌面框架下不存在...所以这种失败是有道理的,只有在PCL世界中,这些组件/类中的一些是自己分解的

在这种情况下,XmlSerializer实际上位于 C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETPortable \ v4.0 \ Profile \ Profile2 \ System.Xml.Serialization.dll (由PCL引用)...作为测试我向Web项目添加了相同的引用...但是在Web项目的运行时,它以黄色死亡屏幕失败表明:

  

无法加载文件或程序集“System.Xml.Serialization”或其中之一   它的依赖关系。定位程序集的清单定义没有   匹配程序集引用。 (HRESULT异常:0x80131040)

1 个答案:

答案 0 :(得分:3)

您需要在远程服务器上安装KB2468871。这是一个已被推送到大多数客户端计算机的GDR - 但是,服务器需要选择加入它(它们通常不会自动安装更新)。