在iis7下检测插件组件

时间:2011-07-15 12:57:45

标签: c# .net reflection iis-7

我有一个由网站和winform应用程序使用的c#程序集。此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 Files下创建了一个卷影副本,其中每个dll都位于自己的文件夹中,因此exeLocation.GetFiles只返回一个dll(本身)。我需要一个适用于所有winforms,webforms,服务等的解决方案(最好不要更改iis7配置)

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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
}