2009-05-29 69 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文件?

相关问题