2012-02-10 83 views
1

我使用Assembly.Load(),然後EntryPoint.Invoke(null, null)爲了在內存中運行.NET程序集。這可以工作,除非主機進程是x86並且執行的程序集是AnyCPU。在這種情況下,執行的程序集會在x86環境中執行並因此出現故障。Assembly.Invoke()與x86和AnyCPU衝突

有沒有辦法在AnyCPU上下文中執行Assemly對象,即使宿主進程是x86?

+0

您可以將它加載到它自己的AppDomain中。當然,你將不得不使用遠程通信技術來與它通信(遠程處理,WCF等) – RQDQ 2012-02-10 19:51:19

+1

爲什麼在構建爲AnyCPU之後在x86中加載時程序集會出現故障?根據定義,任何CPU都應該在AnyCPU上工作。如果有什麼東西被打破了,過程位安全性正在被侵犯。 – ssube 2012-02-10 19:56:40

+0

@RQDQ AppDomain不會解決位差問題。 – vcsjones 2012-02-10 20:08:35

回答

1

在AnyCPU上下文中執行程序集並沒有什麼意義。以AnyCPU爲目標的程序集,如果加載到64位進程中,則將其轉換爲64位,對於32位進程則爲32位。如果這個程序集依賴於64位的主機進程,那麼它的平臺目標應該是x64,而不是任何CPU。

+0

在大多數情況下都是如此。我正在嘗試作爲我的項目的一部分來壓縮.NET程序集。程序集使用EntryPoint.Invoke加載並執行。如果程序集期望以64位運行,並且它以32位運行,因爲主機進程是32位,它將不起作用。另一種方式是,如果子進程是x86,則將宿主進程編譯爲AnyCPU將不起作用。 – bytecode77 2012-02-10 20:19:47