1

我目前擁有一個帶有WP71項目和WP8項目的VS2012解決方案。這些項目中的每一個引用了一個可移植類庫項目,我保留了視圖模型。我還有一個引用PCL幷包含視圖模型測試的單元測試項目。用於Windows Phone 7和8的便攜式庫的單元測試

我遇到的問題是,當我編譯單元測試項目中,我得到以下錯誤:

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框架4.5,所以我加了該版本其運作System.Windows程序集,但後來我得到以下錯誤:

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

看到,因爲這是一個代碼分析錯誤我試圖簡單地忽略這個並繼續,但我想知道是否有人對如何解決這個問題有任何想法,或者是否可以忽略它?

回答

2

所以,我想出了一種解決問題的方法。

爲了讓測試項目編譯我不得不添加System.Windows.dll中組件:

C:\ Program Files文件(x86)的\參考大會\微軟\框架\ 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衝突。