无法使用silverlight类库加载system.xml

时间:2012-04-15 07:29:00

标签: c# silverlight visual-studio-2010 xml-serialization silverlight-5.0

我有3个项目 - silverlight app A和2个silverlight类库B,C。我的序列化逻辑在项目C,Method CallSer()中。如果B的例程调用CallSer(),一切正常。但是如果来自C的例程调用CallSer(),它会给出以下错误。我已经尝试设置Copy Local属性但它没有帮助(我看到当Copy Local = True时程序集被复制到调试文件夹)。这似乎令人惊讶,任何人都有关于如何解决这个问题的想法?感谢。

  

{System.IO.FileNotFoundException:无法加载文件或程序集   'System.Xml,Version = 5.0.5.0,Culture = neutral,   PublicKeyToken = 7cec85d7bea7798e'或其依赖项之一。该   系统找不到指定的文件。文件名:'System.Xml,   Version = 5.0.5.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e'}

更新:我做了一些分析,发现对CallSer()的调用实际上来自另一个.NET类库D.所以调用堆栈显示是D - > C - > CallSer()。只要我有System.Xml.Serialization引用C,我不确定这会有什么不同。另外,我没有在D的“添加引用”选项中看到System.Xml.Serialization。为什么会这样?

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

2 个答案:

答案 0 :(得分:2)

我遇到了尝试运行单元测试的相同问题,问题是如果调用Silverlight类库的代码是针对“桌面”.Net Framework构建的,那么你将会遇到冲突,因为它无法实现要加载DLL的Silverlight版本,只有Silverlight运行时可以加载针对Silverlight CLR / BCL构建的dll。

请看一下创建Portable Class LibraryPortable Library Tool

答案 1 :(得分:0)

Xml.Writer我遇到了同样的问题。

我通过在我的silverlight项目和非silverlight项目之间共享我的源代码文件来解决这个问题,使用' Add as Link'在Visual Studio中。 我还必须使用#ifdef SILVERLIGHT来创建一个单独的命名空间。

Lloyd的便携式课程图书馆方法看起来更干净但我没有时间去尝试。