2011-04-26 16 views
14

可我只是用?:如何將.exe作爲.NET程序集加載?

Assembly.LoadFile 

不知道這是要做到這一點的呢?

但是當我嘗試這種方法,它拋出一個Could not load file or assembly "CustomControlLib"或它的一個依賴。該系統找不到指定的文件。

任何想法?

+4

什麼是業務問題域?不是,我該如何解決這個問題,我想解決這個問題,但是你想要做什麼的動機是什麼? – 2011-04-26 22:28:50

+0

我想將獨立應用程序加載到另一個應用程序中,該應用程序將充當主應用程序的子應用程序。我可以使用dll來做到這一點,但這使事情變得複雜,例如不得不從獨立的WPF應用程序切換到獨立的控制庫,這是很多工作,並且不容易來回移動。 – 2011-04-26 22:44:48

回答

8

您需要確保依賴項也被加載到應用程序域中。如果它們不是自動定位的,則可以訂閱AppDomain.AssemblyResolve以便在需要時手動查找和加載程序集。

例如:

private Assembly AssemblyEventHandler(object sender, ResolveEventArgs args) 
{ 
    return locatedAssembly; 
} 

而且,我會考慮使用Assembly.LoadFrom,特別after reading this具有由nobugz和鏈接一個強大的斷言somereading(所有過時,但應該還是可以承受大部分。)

+0

感謝當我現在使用LoadFrom時,我得到一個類似的錯誤,但與此'試圖加載一個格式不正確的程序。' – 2011-04-26 23:16:08

+0

@Joan Venge:你在什麼平臺上? x86或x64?這個組件的目標是什麼樣的? – 2011-04-26 23:21:09

+0

我在Win7 x64上。大會說這是x86,所以你是對的,可能是問題。但是,我應該將其更改爲任何cpu或x64? – 2011-04-26 23:45:29

0

是的,你可以使用Assembly.LoadFile()。檢查你的路徑。

+0

並檢查以確保任何依賴項都在執行路徑中。 – 2011-04-26 22:29:27

3

是的,你可以加載一個.net的exe同樣的方式,你會加載DLL。你得到的錯誤是由你的EXE的依賴引起的。確保可以找到這些依賴關係,即在您的程序集搜索路徑中。

+0

他們是但我使用第三方控制,當我打開它的源代碼管理時,它使用了其他dll,這些dll在我的解決方案中不存在,但是這些應該不是自動處理的嗎?因爲程序集已經構建並添加爲我的解決方案的參考。 – 2011-04-26 22:46:42

3

如果使用Assembly.LoadFrom()依賴會從那裏組裝所在的目錄加載。

Assembly.LoadFile()被忽略所有其他DLL和EXE文件在同一文件夾。

相關問題