2015-07-10 85 views
2

我在C#上相当新,所以如果我误解了某些东西,请耐心等待。System.BadImageFormatException使用.NET 2.0

我有我的工作的相当老的应用程序,允许你导入的DLL做某些自动执行的任务。所有的老程序员都离开了几年,我不支持联系这个应用程序。我创建了一个DLL在Visual Studio 2013使用.NET 2.0框架,并试图导入它时,我收到此错误信息:

The format of the file 'MyDll.dll' is invalid. Type:System.BadImageFormatException 
Source: mscorlib Stack Trace: at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Boolean isStringized, Evidence assemblySecurity, Boolean throwOnFileNotFound, Assembly locationHint, StackCrawlMark& stackMark) 
    at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Boolean stringized, Evidence assemblySecurity, StackCrawlMark& stackMark) 
    at System.Reflection.Assembly.LoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm) 
    at System.Reflection.Assembly.LoadFrom(String assemblyFile) 
    at Applications.frmApplications.loadFields() 
    at Applications.frmApplications.fillMenuItem() 
    at Applications.frmApplications.ugApplications_AfterSelectChange(Object sender, AfterSelectChangeEventArgs e) 
    at Infragistics.Win.UltraWinGrid.UltraGrid.OnAfterSelectChange(AfterSelectChangeEventArgs e) 
    at Infragistics.Win.UltraWinGrid.UltraGrid.FireEvent(GridEventIds id, EventArgs e) 
    at Infragistics.Win.UltraWinGrid.UltraGrid.SelectNewSelection(Type type, Selected selected) 
at Infragistics.Win.UltraWinGrid.UltraGrid.InternalSelectItem(ISelectableItem  item, Boolean clearExistingSelection, Boolean select) 
    at Infragistics.Win.UltraWinGrid.UltraGridRow.set_Selected(Boolean value) 
    at Applications.frmApplications.searchForApplication() 

我在网上查找这个错误的基本consensious是我使用了错误的。 NET框架版本。我已经使用.NET Reflector来查看工作中使用的较老的dll的版本,并且它的版本为1.1.12.30886 。现在我的问题是有另一种方式绕过这个错误,或者只能导入.NET版本1.1?如果是的话,是否有任何方法可以将我的dll更改为1.1框架,因为我看到它过去的生命周期并且不再受支持,而且我也没有看到在Visual Studio中安装它的方法。

+4

可能是一个64/32位的问题。 –

+1

我也这么认为,但是我将它设置为任何cpu。只是为了笑笑,我试图切换到64/32,并给出了相同的错误。 – Superdoo

+1

你确定这是目标框架的版本,而不是dll的?无论如何,.NET 1.1是非常古老的。从1.1到2.0的变化影响了IL和运行时本身。 –

回答

2

如果你有一个应用程序的源代码,你可以只重新编译它最新的.NET框架。 .NET和C#团队非常努力地使版本兼容,因此您可能不会遇到单个错误。

与1.1(或2.0)框架坚持可能是一个坏主意 - 这是非常严格的比现代版本,并且你已经注意到,它是不支持的。如果你真的想要,你必须下载一个老版本的Visual Studio/SharpDevelop/MonoDevelop /不管。 1.1仍然是每个.NET框架都有自己的Visual Studio版本的时候 - 你需要Visual Studio 2003.NET才能使用1.1。

也就是说,我并没有真正遇到不同的.NET框架版本之间的互操作问题。但是,您需要确保安装了两个版本的框架 - 新版本的框架不包含旧版本(所以2.0不包含1.1,4.0不包含2.0或3.5)。有时你可以用应用程序清单(程序集重新绑定)来解决这个问题,但它可能会变得棘手。

BadImageFormatException另一种常见的来源是位岬。默认情况下,.NET现在使用AnyCPU,这意味着它将使用64位(如果可用),否则使用32位。例如,其中一个项目可能使用32位而另一个使用64位。

+1

我试着切换到32位和64位,它给出了相同的结果。我将尝试查看是否可以重新编译旧程序员在最新框架中留下的资源。 – Superdoo