在iis7下检测插件程序集

本文关键字:插件 程序集 检测 iis7 | 更新日期: 2023-09-27 18:02:17

我有一个c#程序集,用于网站和winform应用程序。此dll的一部分具有检查是否存在可选插件dll的功能,并在存在时使用它。这通过扫描其本地文件夹查找具有匹配接口的dll来工作。因此,所发生的事情的缩写形式是:

Assembly executingAssembly = Assembly.GetExecutingAssembly();
foreach (FileInfo dllFile in exeLocation.GetFiles("*.dll"))
{
  assembly = Assembly.LoadFile(dllFile.FullName);
  foreach (Type exportedType in assembly.GetExportedTypes())
  {
    foreach (Type interfaceType in exportedType.GetInterfaces())
    {
      if (interfaceType == typeof(IMyInterface))
     {
         //Found it!
      }
    }
  }
}

不幸的是,在iis7下运行时,它似乎在'Temporary ASP下创建了一个影子副本。. NET文件,其中每个dll位于其自己的文件夹中,因此exeLocation。GetFiles只返回一个dll(它自己)。我需要一个解决方案,将工作为所有的winforms, webforms,服务等(最好不改变iis7配置)

任何想法?

在iis7下检测插件程序集

DirectoryInfo location;
if(HttpRuntime.AppDomainAppId != null) {
    location = new DirectoryInfo(Path.Combine(HttpContext.Current.Server.MapPath("~/bin")));
} else { 
    location = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory;
}
foreach (var file in location.GetFiles("*.dll"))
{
    // your code
}