我有一個語言編譯器,我剛剛更新了目標.NET 4.0,並且框架程序集的元數據生成器現在在System.Data.dll上失敗,而所有其他工作正常(mscorlib,系統等)System.Data.dll上的系統程序集.NET上的.NET反射失敗
元數據生成器只是簡單地加載程序集,反映所有類型和成員信息,並生成語言的存根類。
我使用Assembly.Load()和/或Assembly.ReflectionOnlyLoad()
無法加載文件或程序集「文件:/// C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ System.Data.dll' 或它的一個依賴關係。試圖加載一個格式不正確的程序 。
它是爲「AnyCPU」構建的。我正在運行安裝了.NET 4.5更新的Windows 7/x64。
我幾個月前有這個問題,這個環節幫我: http://jepsonsblog.blogspot.co.il/2010/12/could-not-load-file-or-assembly.html 你碰到這個了嗎? –
根據谷歌「試圖加載格式不正確的程序」,例如http://blogs.msdn.com/b/arvindsh/archive/2009/06/21/tip-of-the-day-an-attempt-was-made-to-load-a-program-with-an-不正確的format-net-p-invoke-issue.aspx它似乎是32位和64位的問題。不知道大約64位,但在我的情況下,總是需要標記EXE調用..Load爲x86,以便它只加載32位庫。應該可以使用Mono.Cecil – xmojmr
同時加載32位和64位。這是解決它。我可以使用x86 for colastub,因爲它被稱爲子進程並將元數據作爲文本返回。我的實際需求是從.NET程序集訪問類型元數據,這樣我就可以將它們公開爲可樂類。我可以考慮Mono.Cecil。它是用.NET自己編寫的,還是本地C/C++?不幸的是,我在10年前開始使用可口可樂編譯器作爲業餘愛好,當時我在使用C++作爲我的主要語言之前,在Mono存在之前,現在我很遺憾沒有用C#編寫它。我希望能夠直接訪問CLR程序集而不使用存根程序。 – codenheim