2015-07-10 102 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