2009-05-29 72 views
1

我有一個命令行winforms可執行文件,它調用到Windows winforms應用程序中。如何檢測是否有其他程序集可用於我的應用程序

Occassionally Ops在部署應用程序時忘記將exe包含在命令行exe中,導致出錯。

如何優雅的處理這些,並顯示一個友好的錯誤,而不是:

未處理的異常: System.IO.FileNotFoundException:找不到能 無法加載文件或屁股embly「MyappFoo, 版= 5.1。 4303.0,Culture = neutral, PublicKeyToken = null'或其 依賴項之一。系統找不到 指定的文件。文件名: 'MyAppFoo,版本= 5.1.4303.0, 文化=中性公鑰=空' 在AppFoo.Program.Main(字串[] args)

WRN:集綁定日誌記錄是 截止。要啓用程序集綁定 失敗記錄,設置註冊表 值[HKLM \ SOFTWARE \中號 icrosoft \融合EnableLog!](DWORD)至1 注:有一些與程序集綁定失敗 羅gging關聯的性能損失。要關閉此功能 ,請刪除註冊表值 [HKLM \ Software \ Microsoft \ Fus ion!EnableLog]。

編輯:

爲了澄清一點,我怎麼攔截FileNotFoundExcception,當

static int Main(string[] args) 
{ 
    try 
    { 
     Console.WriteLine"MyPhooApp Command Line (c) PhooSoft 2008"); 
    } 
    catch (System.IO.FileNotFoundException fe) 
    { 
     Console.WriteLine("Unable to find foo.exe"); 
     return -1; 
    } 
} 

犯規writeln無論是。

回答

4

您可以使用.NET 2.0中引入的僅反射加載功能。這使您可以加載程序集進行檢查,而無需實際將其加載到AppDomain中。

Assembly.ReflectionOnlyLoad

Assembly.ReflectionOnlyLoadFrom

+0

值得注意的是,如果程序集沒有找到,這些函數仍然會拋出FileNotFound異常,但是您可以準確瞭解它何時會發生。 – 2009-05-29 07:02:21

+0

確實如此,但另一個好處是,如果您嘗試使用正常的程序集加載API,應用程序將永遠不會再嘗試再次探測程序集。 另一個優點是,您可以使用ReflectionOnlyLoadFrom和文件路徑,而無需使用綁定上下文。如果將Assembly.LoadFrom與文件路徑一起使用,則可以結束加載相同的程序集兩次。 – Josh 2009-05-29 07:11:05

0

你能不能簡單地尋找與FileInfo.Exists文件?

相關問題