我有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版本?
答案 0 :(得分:2)
我遇到了尝试运行单元测试的相同问题,问题是如果调用Silverlight类库的代码是针对“桌面”.Net Framework构建的,那么你将会遇到冲突,因为它无法实现要加载DLL的Silverlight版本,只有Silverlight运行时可以加载针对Silverlight CLR / BCL构建的dll。
答案 1 :(得分:0)
Xml.Writer
我遇到了同样的问题。
我通过在我的silverlight项目和非silverlight项目之间共享我的源代码文件来解决这个问题,使用' Add as Link'在Visual Studio中。
我还必须使用#ifdef SILVERLIGHT
来创建一个单独的命名空间。
Lloyd的便携式课程图书馆方法看起来更干净但我没有时间去尝试。