2011-02-02 37 views
2

我寫了一個使用SharePoint dll文件的快速控制檯應用程序。如果我試圖在沒有說dll文件的機器上運行它,應用程序在打開時立即崩潰。解決方法需要:通知用戶該exe文件缺少應用程序內的依賴項?

我絕對是一個新手,但我寧願如果有一種方式,應用程序可以告訴用戶他們正在錯誤的機器上使用它,然後它很難崩潰。除了編寫第二個應用程序來掃描依賴關係之外,是否還有其他方法可以在相關應用程序之前運行?如果我將需要依賴關係的代碼放在一個單獨的類中,那麼在應用程序檢查到它在正確的計算機上之後纔會實例化該應用程序,那麼應用程序在打開時是否仍會立即失敗?當然有人已經找到了解決這種情況的解決方法。

回答

1

如何包裝該DLL的加載到:

try { 
     Assembly.Load(..); 
} 
catch(TypeLoadException ex) { 

     //Let the user know which type from what dll was not loaded. 
} 

你將不得不在運行時加載該DLL實際上,雖然這樣做。

+0

這工作完美,謝謝你! – ep1033

+0

@ ep1033請把我的答案作爲正確的答案(大綠色複選標記)! :) – dexter

2

不幸的是,您將不得不編寫一個啓動器應用程序 - 如果您仔細考慮,所需的DLL需要在主應用程序中才能啓動。如果將掃描嵌入到主應用程序中,由於缺少DLL,它將不會啓動。

您可以使用插件體系結構來掃描所需的DLL並動態加載它們(想起MEF)。

+0

因此,當我編寫第二個應用程序將啓動EXE,有沒有辦法將這兩個應用程序捆綁在一起,以便用戶只需要複製粘貼一個項目?或者我必須創建兩個exes,並堅持將用戶複製到同一個目錄。 – ep1033

+0

@ ep1033 - 它們必須是單獨的可執行文件(如果使用靜態鏈接的DLL),因爲exe只能有一個入口點。您始終可以爲捆綁這兩者的應用程序創建一個設置。 – Oded

+0

捆綁,你的意思是像ILMerge? – ep1033

0

可能可以將程序集複製到輸出目錄以獲取共享點。所以引用是在本地進行的。

0

如果您的應用程序直接引用SharePoint dll或程序集,則無法通知用戶,因爲如果任何靜態鏈接的所需程序集不可用,.NET CLR將不會執行您的代碼。

您可以使用某種動態加載的SharePoint程序集和類型,因此在啓動時應用程序不需要該程序集來執行,或者爲您的應用程序創建啓動程序來執行檢查,如果全部是確定啓動您的應用程序,否則通知用戶。

相關問題