2009-06-16 68 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'またはその依存関係の1つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。 (HRESULTからの例外:0x80131040)

上記のプロパティにコメントすると、警告が却下され、ユーザーコントロールが再び表示されます。 アプリケーションは正常に構築され、どちらの場合でも問題なく実行されます。

なぜこのようなことが起こるのか誰にも分かりますが、どうすれば修正できますか?

+0

static-keywordを削除するとどうなりますか? –

+0

デザイナーがエラーメッセージを表示します。 – mrtaikandi

+0

アプリケーションで特定のバージョン(3.5.0.0)を参照していますか?それは、参照で割り当てたバージョンと、デザイナーが実際に見つけることができるバージョンのバージョン番号が一致しないことがあります。 –

答えて

4

この問題は私に数時間を要しました。私はgacutilを使ってGACにMicrosoft.WindowsCE.Forms.dllを追加して解決しました。それが役に立てば幸い。 Robin

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をプロジェクトのサブフォルダにコピーして、プロジェクトのビルド前のイベントに次の行を追加すると、それは正常に機能します。 。 PCを再インストールしてください。

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