2009-06-16 135 views
6

我有一個Windows Mobile應用程序,我想檢查設備的方向。 因此,我寫了下面的屬性在我的形式之一:與Microsoft.WindowsCE.Forms奇怪的行爲

internal static Microsoft.WindowsCE.Forms.ScreenOrientation DeviceOriginalOrientation { get; private set; } 

奇怪的是,之後,每當我打開一個用戶控件,設計顯示了這個警告,即使用戶控件不使用屬性:

無法加載文件或程序集'Microsoft.WindowsCE.Forms,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 969db8053d3322ac'或其某個依賴項。定位的程序集清單定義與程序集引用不匹配。 (來自HRESULT的例外:0x80131040)

註釋上述屬性將關閉警告並再次顯示用戶控件。 該應用程序已成功構建並在兩種情況下運行都沒有任何問題。

有人知道爲什麼發生這種情況,我該如何解決?

+0

如果你刪除了static-keyword? – 2009-06-16 08:40:35

回答

4

這個問題花了我幾個小時。我通過使用gacutil向GAC添加Microsoft.WindowsCE.Forms.dll來解決此問題。希望能幫助到你。 羅賓

2

是的,這是非常期待的。由於它是一個靜態屬性(我首先不同意),所以設計者必須初始化它,這意味着加載Microsoft.WindowsCE.Forms,這意味着加載設備特定的入口點。無可否認,錯誤信息很糟糕,但是設計人員對設備的支持有lots of fun issues,這很難推測原因。

我想嘗試將它移動到另一個類或用支票包裝它,看看你是否在設計師。像這樣的東西適合我們:

protected bool IsDesignTime 
{ 
    get 
    { 
     // Determine if this instance is running against .NET Framework 
     // by using the MSCoreLib PublicKeyToken 
     System.Reflection.Assembly mscorlibAssembly = typeof(int).Assembly; 
     if ((mscorlibAssembly != null)) 
     { 
      if (mscorlibAssembly.FullName.ToUpper().EndsWith("B77A5C561934E089")) 
      { 
       return true; 
      } 
     } 
     return false; 
    } 
} 
1

如果您的Microsoft.WindowsCE.Forms.dll複製到你的項目,例如一個子文件夾,然後添加以下預建項目的活動,它也將工作,如果你如就好了。重裝你的電腦:

"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /i "$(ProjectDir)SubFolder\Microsoft.WindowsCE.Forms.dll"