2

我有 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?

4

2 回答 2

2

我在尝试运行单元测试时遇到了同样的问题,问题是如果调用 Silverlight 类库的代码是针对“桌面”.Net 框架构建的,您将遇到冲突,因为它将无法加载Silverlight 版本的 dll,只有 Silverlight 运行时可以加载针对 Silverlight CLR/BCL 构建的 dll。

看看创建可移植类库可移植库工具

于 2012-04-28T11:04:29.843 回答
0

我有同样的问题Xml.Writer

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

Lloyd 的可移植类库方法看起来更简洁,但我没有时间尝试。

于 2014-04-04T08:59:45.157 回答