【问题标题】:Unit testing with portable library for Windows Phone 7 and 8使用适用于 Windows Phone 7 和 8 的便携式库进行单元测试
【发布时间】:2013-03-22 12:42:52
【问题描述】:

我目前有一个带有 WP71 项目和一个 WP8 项目的 VS2012 解决方案。这些项目中的每一个都引用了一个可移植类库项目,我在其中保存了视图模型。我还有一个引用 PCL 并包含视图模型测试的单元测试项目。

我遇到的问题是在编译单元测试项目时出现以下错误:

error CS0012: The type 'System.Windows.Input.ICommand' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'

所有项目,包括单元测试项目,都引用了 Portable.MvvmLightLibs NuGet 包。

在四处寻找这个程序集后,我注意到有不同的版本,一个用于 WP8,一个用于 Silverlight 4,等等。在所有这些版本中,我不确定要使用哪个。

单元测试项目的目标是 .NET Framework 4.5,因此我添加了适用于该版本的 System.Windows 程序集,但随后出现以下错误:

 error : CA0001 : Could not resolve reference to System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes

看到这是一个代码分析错误,我很想直接忽略它并继续,但我想知道是否有人对如何解决这个问题有任何想法,或者忽略它是否安全?

【问题讨论】:

    标签: visual-studio-2012 windows-phone mvvm-light portable-class-library


    【解决方案1】:

    所以,我想出了一个解决问题的方法。

    要编译测试项目,我必须从以下位置添加 System.Windows.dll 程序集:

    C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71

    但是,使用“添加引用”对话框添加它会自动添加 .NET 4.5 版本,即使我直接浏览到该文件夹​​也是如此。为了解决这个问题,我为测试项目打开了 *.csproj 并替换了以下行:

    <Reference Include="System.Windows"/>
    

    <Reference Include="System.Windows">
          <HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\System.Windows.dll</HintPath>
    </Reference>
    

    这确保引用的是 2.0.5.0 版本而不是 .NET 4.5 版本。这种方法的问题是某些类型与其他程序集(即 System.dll)发生冲突,但由于我只是在测试可移植类库中的视图模型,所以我并没有那么烦恼。

    理想情况下,测试项目也应该是一个可移植类库,但我还没来得及测试它。

    另一个问题是,在发布模式下构建时,我倾向于将警告显示为错误,所以这总是失败,因为总会有警告抱怨与 System.dll 的命名冲突。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      相关资源
      最近更新 更多