2009-06-16 40 views
6

Tôi có ứng dụng Windows Mobile mà tôi muốn kiểm tra hướng thiết bị. Vì vậy, tôi đã viết các tài sản sau đây trong một trong các hình thức của tôi:Hành vi lạ với Microsoft.WindowsCE.Forms

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

Điều lạ là sau đó bất cứ khi nào tôi mở một UserControl, nhà thiết kế cho thấy cảnh báo này ngay cả khi UserControl mà không sử dụng bất động sản:

Không thể tải tệp hoặc lắp ráp 'Microsoft.WindowsCE.Forms, Phiên bản = 3.5.0.0, Văn hóa = trung lập, PublicKeyToken = 969db8053d3322ac' hoặc một trong các phụ thuộc của nó. Định nghĩa tệp kê khai của assembly được đặt không khớp với tham chiếu assembly. (Ngoại lệ từ HRESULT: 0x80131040)

Nhận xét thuộc tính trên sẽ loại bỏ cảnh báo và hiển thị lại điều khiển người dùng. Ứng dụng được xây dựng thành công và chạy mà không gặp bất kỳ sự cố nào trong cả hai trường hợp.

Có ai biết tại sao điều này xảy ra không và làm cách nào để khắc phục sự cố?

+0

Điều gì sẽ xảy ra nếu bạn xóa từ khóa tĩnh? –

+0

Trình thiết kế hiển thị thông báo lỗi. – mrtaikandi

+0

Bạn có tham chiếu phiên bản cụ thể đó (3.5.0.0) trong ứng dụng của mình không? Nó có thể không khớp trong số phiên bản từ phiên bản bạn đã chỉ định trong tham chiếu và phiên bản nhà thiết kế thực sự có thể tìm thấy. –

Trả lời

4

Vấn đề này mất một vài giờ. Tôi đã giải quyết nó bằng cách thêm Microsoft.WindowsCE.Forms.dll vào GAC bằng gacutil. Hy vọng nó giúp. Robin

2

Vâng, điều này là khá nhiều mong đợi. Vì nó là một thuộc tính tĩnh (mà tôi không đồng ý ở nơi đầu tiên), nhà thiết kế phải khởi tạo nó, có nghĩa là tải lên Microsoft.WindowsCE.Forms, có nghĩa là tải các điểm vào của thiết bị cụ thể. Phải thừa nhận rằng, các thông báo lỗi hút, nhưng sau đó sự hỗ trợ thiết kế cho các công cụ thiết bị có lots of fun issues đó là khó khăn để thần thánh nguyên nhân.

Tôi sẽ thử chuyển sang lớp khác hoặc gói nó bằng séc để xem bạn có ở trong nhà thiết kế hay không. Một cái gì đó như thế này hoạt động cho chúng tôi:

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

Nếu bạn sao chép Microsoft.WindowsCE.Forms.dll vào thư mục con trong dự án của bạn, và sau đó thêm phần sau vào các sự kiện dựng sẵn dự án của bạn, nó cũng sẽ hoạt động tốt nếu bạn . cài đặt lại PC của bạn:

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