Укажите путь поиска для DllImport в.NET

Существует ли способ указать пути, которые будут искаться данный блок, который импортируется с DllImport?

[DllImport("MyDll.dll")]
static extern void Func();

Это будет искать dll в dir приложения и в переменной окружения PATH. Но время от времени dll будет помещен в другое место. Эта информация может быть указана в app.config или файле манифеста для предотвращения динамической загрузки и динамического вызова?

53
задан Stefan 18 May 2010 в 23:34
поделиться

1 ответ

Вызовите SetDllDirectory с дополнительными путями к DLL перед первым вызовом импортированной функции.

Сигнатура P / Invoke:

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool SetDllDirectory(string lpPathName);

Чтобы установить более одного дополнительного пути поиска DLL, измените переменную среды PATH , например:

static void AddEnvironmentPaths(string[] paths)
{
    string path = Environment.GetEnvironmentVariable("PATH") ?? string.Empty;
    path += ";" + string.Join(";", paths);

    Environment.SetEnvironmentVariable("PATH", path);
}

Здесь есть дополнительная информация о порядке поиска DLL в MSDN .


Обновлено 30.07.2013:

Обновленная версия вышеуказанного с использованием Path.PathSeparator :

static void AddEnvironmentPaths(IEnumerable<string> paths)
{
    var path = new[] { Environment.GetEnvironmentVariable("PATH") ?? string.Empty };

    string newPath = string.Join(Path.PathSeparator.ToString(), path.Concat(paths));

    Environment.SetEnvironmentVariable("PATH", newPath);
}
67
ответ дан 7 November 2019 в 08:45
поделиться
Другие вопросы по тегам:

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