Microsoft.CSharp库中的BadImageFormat异常

时间:2013-10-19 15:42:47

标签: c# .net windows

从8开始切换到Windows 8.1后,我在运行C#应用程序时遇到的问题。 问题是我从标题中得到了这个例外,在线帮助不大。我试图找出问题,似乎我的x64应用程序试图调用x86 CSharp库。项目中的引用导致DLL文件,在使用/ headers参数输出调用x64 dumpbin程序时:

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。或者也许我完全失去了,还有一些其他问题。无论如何,异常发生在一个构造函数的启动时,完整的细节是:

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字节文件来解决这个问题。

1 个答案:

答案 0 :(得分:4)

  

预计该模块将包含一个程序集清单

您一直在查看引用程序集,它不是运行程序时实际加载的程序集。 Microsoft.CSharp.dll存储在GAC中,由.NET安装程序放在那里。您可以通过导航到c:\ windows \ microsoft.net \ assembly \ gac_msil \ microsoft.csharp来查看该文件。继续点击,直到找到该文件。

异常消息是一个非常不健康的消息,它不能将DLL识别为.NET程序集。除了文件被破坏之外,没有什么可行的解释。文件损坏总是坏消息,强烈暗示您的硬盘出现故障。您需要修复它,必要时在superuser.com进行跟进