将Silverlight特定的System.Xml.Linq dll与非Silverlight System.Xml.Linq dll混合使用

时间:2010-03-23 11:59:06

标签: c# .net wpf linq silverlight

我有一个逻辑层,它引用Silverlight的System.Xml.Linq dll和WPF中的GUI(因此使用非Silverlight System.Xml.Linq dll)。当我尝试将GUI项目中的XElement传递给Logic项目中的方法时,我(基本上)“XElement不是XElement类型”错误。更复杂的是,我无法编辑逻辑层项目。

非Silverlight DLL位于: C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Xml.Linq.dll

Silverlight DLL位于: C:\ Program Files(x86)\ Microsoft SDKs \ Silverlight \ v3.0 \ Libraries \ Client \ System.Xml.Linq.dll

我是C#的新手,但我很确定我的问题是我引用了不同的DLL来访问System.Xml.Linq命名空间。我试图用Silverlight的System.Xml.Linq.dll替换我的非Silverlight System.Xml.Linq.dll,但收到了程序集错误。

有没有办法解决我的WPF GUI项目的废弃和创建Silverlight项目的问题?

3 个答案:

答案 0 :(得分:1)

解决方案是让你的逻辑项目有两个版本。一个引用.NET 3.5库,另一个引用Silverlight库。两个项目共享一组通用的代码文件。

因此,您获得了WPF的构建和Silverlight的构建。如果您需要更改逻辑代码,可以进行一次,然后重建解决方案,这将创建库的两个版本。

默认情况下,Silverlight库项目已经具有“SILVERLIGHT”的条件编译符号。因此,您的逻辑代码可能必须处理.NET 3.5和Silverlight库之间的差异,您可以使用条件编译来处理它们。

答案 1 :(得分:0)

您能澄清“收到的汇编错误”吗?您可能可以使用extern alias引用它们,但这很棘手且令人困惑。事后看来,将这种依赖关系放在API中可能是一个错误。或者:你可以重建目标框架的逻辑DLL吗?

答案 2 :(得分:0)

Silverlight和WPF使用根本不同的框架。它们不兼容。很多基本框架在两者之间是相同的,但实际上它们并不相同。

如上所述,在不同项目中共享代码可能是最佳解决方案,但要注意条件编译。通常会导致很多复杂性。像依赖注入的装饰器模式这样的方法可能更适合隐藏差异。

编辑:删除了有关客户端配置文件与Silverlight的错误信息。