【发布时间】:2012-04-15 07:29:00
【问题描述】:
我有 3 个项目 - silverlight 应用程序 A 和 2 个 silverlight 类库 B、C。我的序列化逻辑在项目 C,方法 CallSer() 中。如果 B 的例程调用 CallSer(),则一切正常。但是,如果 C 中的例程调用 CallSer(),则会出现以下错误。我尝试设置 Copy Local 属性,但没有帮助(当 Copy Local = True 时,我看到程序集被复制到调试文件夹中)。这似乎令人惊讶,有人对如何解决这个问题有想法吗?谢谢。
{System.IO.FileNotFoundException: 无法加载文件或程序集 'System.Xml,版本=5.0.5.0,文化=中性, PublicKeyToken=7cec85d7bea7798e' 或其依赖项之一。这 系统找不到指定的文件。文件名:'System.Xml, 版本=5.0.5.0,文化=中性,PublicKeyToken=7cec85d7bea7798e'}
更新:我做了更多分析,发现对 CallSer() 的调用实际上来自另一个 .NET 类库 D。所以调用堆栈显示为 D -> C -> CallSer()。只要我有System.Xml.Serialization 对C 的引用,我不确定这会有什么不同。另外,我没有看到System.Xml.Serialization 在D 的添加引用选项中列出?为什么会这样?
更新:看起来 XmlSerializer 对加载哪个引用感到困惑。这是因为 Silverlight 在 System.Xml.Serialization.dll 程序集中定义了 XmlSerializer,而 .NET 框架在 System.Xml.dll 中有它。我的项目 D 引用了 System.Xml,C 有 System.Xml 和 System.Xml.Serialization。如何确保 C 始终引用 Silverlight 版本的 dll?
【问题讨论】:
-
检查您的所有项目是否正确定位 Silverlight 5。其中一个引用必须是错误的。最可靠的检查方法是以文本形式打开三个项目文件并比较其中的引用,但您应该可以直接从 Visual 进行。
-
我检查了文件,它们指向 5.0。
v5.0 -
那么对 System.Xml 的引用之一肯定是错误的......
-
没人有什么想法吗?我相信有人会陷入这种情况!
-
也许检查 GAC(全局程序集缓存),看看哪个版本存在
标签: c# silverlight visual-studio-2010 xml-serialization silverlight-5.0