как загрузить все блоки из Вашего / каталога bin

Мое общее правило в исключении по сравнению с аргументом кода возврата:

  • Использование errorcodes при необходимости в локализации/интернационализации - в.NET Вы могли использовать эти errorcodes для ссылки на файл ресурсов, который затем отобразит ошибку на соответствующем языке. Иначе используйте исключения
  • исключения Использования только для ошибок, которые являются действительно исключительные. Если это - что-то, что происходит, справедливо часто или используйте булевскую переменную или перечисление errorcode.
39
задан mrblah 17 August 2009 в 14:33
поделиться

2 ответа

Что ж, вы можете взломать это вместе с помощью следующих методов, сначала используйте что-то вроде:

string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

, чтобы получить путь к вашей текущей сборке. Затем переберите все библиотеки DLL в пути, используя метод Directory.GetFiles с подходящим фильтром. Ваш окончательный код должен выглядеть так:

List<Assembly> allAssemblies = new List<Assembly>();
string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

foreach (string dll in Directory.GetFiles(path, "*.dll"))
    allAssemblies.Add(Assembly.LoadFile(dll));

Обратите внимание, что я не тестировал это, поэтому вам может потребоваться проверить, действительно ли dll содержит полный путь (и объединить путь, если это не так)

48
ответ дан 27 November 2019 в 02:15
поделиться

Вы можете сделать это так, но вам, вероятно, не следует загружать все в текущий домен приложения таким образом, поскольку сборки могут содержать вредоносный код.

public IEnumerable<Assembly> LoadAssemblies()
{
    DirectoryInfo directory = new DirectoryInfo(@"c:\mybinfolder");
    FileInfo[] files = directory.GetFiles("*.dll", SearchOption.TopDirectoryOnly);

    foreach (FileInfo file in files)
    {
        // Load the file into the application domain.
        AssemblyName assemblyName = AssemblyName.GetAssemblyName(file.FullName);
        Assembly assembly = AppDomain.CurrentDomain.Load(assemblyName);
        yield return assembly;
    } 

    yield break;
}

РЕДАКТИРОВАТЬ: Я не тестировал код ( нет доступа к Visual Studio на этом компьютере), но я надеюсь, что вы уловили идею.

6
ответ дан 27 November 2019 в 02:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: