我有 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,版本=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089'---> System.IO.FileNotFoundException:无法加载文件或程序集'System.Xml.Serialization,版本=2.0 .5.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35,Retargetable=Yes' 或其依赖项之一。该系统找不到指定的文件。文件名:'System.Xml.Serialization,Version=2.0.5.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35,Retargetable=Yes'
堆栈跟踪表明它是在第一次调用 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)