1

ここで何が起こっているのかわかりません。私のc#(VS2008)アプリは32ビットOSで正常に動作しますが、Windows 2008 R2 64ビットで同じように実行すると、次のエラーが発生します。

一時クラスを生成できません(result = 1)。エラーCS0008:ファイル'c:\ Windows \ assembly \ GAC_MSIL \ xxxx \ 7.0.1001.0__5b72a65e64576834\xxxx.dll'-'不正なキーからメタデータを読み取るときに予期しないエラーが発生しました。'

いくつかの記事を調べたところ、一時フォルダに十分な権限がない場合、このエラーがポップアップ表示されます。そして、一時フォルダー "C:\ windows \ temp"とユーザー一時フォルダー( "C:\ users \\ appdata \ local \ temp")にアクセス許可を与えましたが、運がありません。このアセンブリにはWebサービスプロキシクラスがあります。これにはXMLシリアル化が必要であり、実行時にtempフォルダーを使用してシリアル化されたアセンブリを作成すると、このエラーがスローされます。

どんな入力でも大歓迎です。ところで、イベントビューアでそのエラー(生成できません.....)が見つかりました。

ありがとう。

4

1 に答える 1

1

あなたの質問にはいくつかの根本的な間違いがあります。これは実行時エラーではなく、コンパイル時エラーです。メッセージ内の CS0008 に注意してください。次のように文書化されています。

メタデータを取得するために DLL が正常に開かれましたが、破損しているため、そこからデータを読み取ることができませんでした。詳細については、「/reference (メタデータのインポート) (C# コンパイラ オプション)」を参照してください。

次に間違っているのは、このアセンブリが明らかに GAC に由来することです。コンパイラは、GAC からアセンブリを参照することはありません。参照アセンブリは、関連するディレクトリに保存されているコピーである必要があります。.NET Framework アセンブリの c:\windows\microsoft.net\etc のように。

このエラーを取得するために何をしたとしても、明らかに保証が無効になります。あなたの質問からあなたがしたことをリバースエンジニアリングすることはできません.アセンブリ名を難読化することは確かに役に立ちませんでした.

于 2010-06-08T22:22:48.620 に答える