2

我有3个项目 - silverlight应用程序A和2个silverlight类库B,C。我的序列化逻辑位于项目C中,方法CallSer()。如果来自B的例程调用CallSer(),则一切正常。但是如果来自C的例程调用CallSer(),它会给出下面的错误。我已经尝试设置复制本地属性,但它没有帮助(我看到当复制本地= True时复制到调试文件夹的程序集)。这似乎令人惊讶,任何人都有如何解决这个问题的想法?谢谢。无法使用silverlight类库加载system.xml

{System.IO.FileNotFoundException:未能加载文件或组件 '的System.Xml,版本= 5.0.5.0,文化=中性 公钥= 7cec85d7bea7798e' 或它的一个依赖。 系统找不到指定的文件。文件名:“的System.Xml, 版本= 5.0.5.0,文化=中性公钥= 7cec85d7bea7798e”}

更新:我做了一些更多的分析,发现调用CallSer()实际上是从另一个.NET类库D.所以调用堆栈显示是D - > C - > CallSer()。我不确定这可以造成什么区别,只要我有System.Xml.Serialization引用C.另外,我没有看到System.Xml.Serialization列在添加引用选项为D?为什么?

更新:看起来XmlSerializer对于加载哪个引用感到困惑。这是因为Silverlight在System.Xml.Serialization.dll程序集内定义了XmlSerializer,.NET Framework在System.Xml.dll中定义了它。我的项目D有System.Xml的引用,C有System.Xml和System.Xml.Serialization。我如何确保C始终引用Silverlight版本的dll?

+0

检查您的所有项目是否正确定位Silverlight 5.其中一个引用必须是错误的。最可靠的检查方法是以文本形式打开三个项目文件并比较其中的引用,但是您应该可以直接从Visual中进行。 – jv42 2012-04-16 09:11:09

+0

我检查了这些文件,它们指向5.0。 v5.0 stech 2012-04-16 10:44:12

+0

然后其中一个对System.Xml的引用必须是错误的... – jv42 2012-04-16 13:49:44

回答

2

我遇到了同样的问题试图运行单元测试来了,问题是,如果被调用的Silverlight类库代码对“桌面” .Net框架构建,你会得到冲突,因为它不会是能够加载dll的Silverlight版本,只有Silverlight运行时才能加载针对Silverlight CLR/BCL构建的dll。

看看创建Portable Class LibraryPortable Library Tool

0

Xml.Writer有同样的问题。

我通过在Visual Studio中使用'添加为链接'在我的Silverlight项目和我的非Silverlight项目之间共享我的源代码文件来解决此问题。 我也不得不使用#ifdef SILVERLIGHT有一个单独的命名空间。

劳埃德的便携式类库的方法似乎更清洁,但我没有时间去尝试。