我们的一些应用程序依赖于用于记录和配置的常见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都存在 - 有没有办法禁用它?
答案 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
。