1

8 から Windows 8.1 に切り替えた後、C# アプリケーションの実行にほとんど問題はありません。問題は、タイトルからこの例外が発生し、オンラインでのヘルプがあまりないことです。問題を特定しようとしましたが、x64 アプリケーションが x86 CSharp ライブラリを呼び出そうとしているようです。プロジェクト内の参照は、/headers パラメーターを使用して x64 dumpbin プログラムを呼び出すと、DLL ファイルにつながります。

Dump of file Microsoft.CSharp.dll

PE signature found

File Type: DLL

FILE HEADER VALUES
             14C machine (x86)
               3 number of sections
        4FFA5C64 time date stamp Mon Jul 09 06:21:56 2012
               0 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
            2022 characteristics
                   Executable
                   Application can handle large (>2GB) addresses
                   DLL

マシンが x86 であるのに対し、アプリケーションは x64 で実行されていることに注意してください (Environment.Is64BitProcess で確認)。これは私が直面している問題かもしれませんが、解決する方法が見つかりません。x64 .Net ライブラリがインストールされていないようです。私が見つけたのは次の場所だけですC:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework。または、私は完全にオフになっていて、他の問題があるのか​​もしれません。とにかく、コンストラクターの1つで起動時に例外が発生し、完全な詳細は次のとおりです。

Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
"Could not load file or assembly 'Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The module was expected to contain an assembly manifest."

編集:

まだパニックに陥っている間に、 CSharp.dllをダウンロードし、回答に示されているパスのダミーの0バイトファイルを置き換えることでこれを解決しました。

4

1 に答える 1

4

モジュールにはアセンブリ マニフェストが含まれている必要がありました

参照アセンブリを見てきましたが、プログラムを実行したときに実際に読み込まれるアセンブリではありません。Microsoft.CSharp.dll は GAC に保存され、.NET インストーラーによってそこに配置されます。c:\windows\microsoft.net\assembly\gac_msil\microsoft.csharp に移動すると、ファイルを確認できます。ファイルが表示されるまでクリックし続けます。

例外メッセージは非常に不健全なもので、DLL を .NET アセンブリとして認識しません。ファイルが破損していること以外に、それについての適切な説明はほとんどありません。ファイルの破損は常に悪いニュースであり、ハードディスクが故障していることを示す強力な兆候です。修正する必要があります。必要に応じて、superuser.com でフォローアップしてください。

于 2013-10-19T15:59:01.353 に答える