如何在我的.Net 4项目中添加特定版本的System.XML(2.0.5.0)

时间:2011-03-16 13:51:43

标签: .net winforms dll windows-phone-7

我正在使用标准的.Net 4 WinForms项目为我的Windows 7手机游戏制作地图编辑器。

我已经编写了XmlSerialise / Desearilise方法 - 它们存在于电话项目中EntityCollection类的Load和Save方法中。

Windows 7 Phone使用2.0.5.0版本的System.Xml,System.Xml.Linq和System.Xml.Serialization。

我将这些dll复制到libs目录并试图从我的.Net 4项目中引用它们 - System.Xml.Serialzation引用了我预期的2.0.5.0但是需要System.Xml dll - 当我从我的Libs目录它只是忽略了我引用.Net 4一个。

无论如何我可以强迫它引用2.0.5.0吗?

谢谢,

安迪

3 个答案:

答案 0 :(得分:1)

只要编译器不抱怨,这里的选项可能只是在两个项目(win表单和WP7)之间共享文件

答案 1 :(得分:1)

我知道如何引用特定二进制文件而不是让项目转到DLL的GAC的唯一方法是在.csproj文件中提供HintPath以供参考。它看起来像这样:

<Reference Include="System.Xml">
<SpecificVersion>False</SpecificVersion>
    <HintPath>..\relative\path\to\lib\folder\System.Xml.dll</HintPath>
</Reference>

您可能希望完全限定System.Xml的版本并将SpecificVersion设置为True。通过在Visual Studio的References文件夹中的System.Xml引用的“属性”窗口中查看“路径”值,可以验证是否正在引用lib文件夹中的特定DLL。

答案 2 :(得分:1)

要引用这些特定版本的程序集,请转到每个参考的属性窗口,并将别名全局更改为 Silverlight的即可。在引用这些程序集的类文件中,您可以使用如下语句添加每类型别名或别名:

extern alias Silverlight;
// Per-type:
using XDocument = Silverlight::System.Xml.Linq;
// Aliased namespace:
using Silverlight::System.Xml.Linq;

这意味着每次使用非限定类型XDocument(或以相同方式别名的任何其他类型)时,它将使用具有匹配别名的程序集中的那个(即您的WP7特定类型) )。

您也可以在代码中内联执行此操作,而无需通过相应地限定类型来添加using语句。 E.g。

var document = Silverlight::System.Xml.Linq.XDocument.Parse(text);

在您的情况下,我认为使用语句的别名命名空间可能是您最好的选择。