Обнаружение сборок плагинов под iis7 - PullRequest
1 голос
/ 15 июля 2011

У меня есть сборка 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 Files, где каждая dll находится в своей собственной папке, поэтому exeLocation.GetFiles возвращает только одну dll (саму себя). Мне нужно решение, которое будет работать для всех winforms, webforms, services и т. Д. (Желательно без изменения конфигурации iis7)

Есть идеи?

1 Ответ

1 голос
/ 18 июля 2011
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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...