尽管FileNotFoundException运行控制台应用程序

时间:2014-10-09 13:15:45

标签: c# .net dll

我们的一些应用程序依赖于用于记录和配置的常见dll。此常见dll将添加到我们服务器上的GAC中,并且不包含在我们部署的bin文件夹中。

我想编写一个简单的控制台应用程序来检查common.dll是否已添加到服务器上的GAC。 我没有运气使用fusion或assembly.load来进行检查:Check GAC for an assembly

我的想法是在本地包含对dll的引用,确保copy local is off,然后在调用dll中的方法时尝试捕获服务器上的FileNotFoundException。

像这样的东西

  static void Main()
        {
            try
            {                 
                Common.Logger.LogInfo("Testing logger."); //call to the dll
                Console.WriteLine("loaded successfully");
                Console.ReadLine();
            }
            catch (System.IO.FileNotFoundException e)
            {
                Console.WriteLine("Common dll missing!" + e.Message);
                Console.ReadLine();
            }
        }  

但是由于dll不存在,应用程序将崩溃并在击中main方法之前抛出FileNotFoundException。我假设有一些初始检查,运行.exe时所有dll都存在 - 有没有办法禁用它?

1 个答案:

答案 0 :(得分:2)

尝试将其移至单独的方法中:

static void Main()
{
    try
    {     
        CheckLogger();            
        Console.WriteLine("loaded successfully");
        Console.ReadLine();
    }
    catch (System.IO.FileNotFoundException e)
    {
        Console.WriteLine("Common dll missing!" + e.Message);
        Console.ReadLine();
    }
}  

static void CheckLogger()
{
    Common.Logger.LogInfo("Testing logger."); //call to the dll
}

您需要使用Main方法启动运行才能进入try / catch块,如果不能,则不会发生这种情况( JIT)编译。但是由于每个方法都是单独编译的,所以这应该有效。在编译直接依赖于程序集的方法时会触发缺少程序集的FileNotFoundException