如何在 [DllImport] 之前调用 SetDllDirectory()?

How can I call SetDllDirectory() before [DllImport]?

我正在构建一个需要从 C++ dll 调用函数的 .Net C# 库项目。 C++ dll 位于我项目的 "lib" 文件夹中。所以我使用 [DllImport]。我需要将 lib 文件夹中 C++ dll 的路径传递给 DllImport。

我不希望它是硬编码的完整路径。据我所知,我可以调用 SetDllDirectory("lib") 将我的 lib 文件夹添加到搜索中。但是,如果我没记错的话,SetDllDirectory() 应该在 [DllImport] 之前被调用。我可以从哪里打电话?如果我从静态构造函数中执行,则为时已晚。

P/invoke DLL 在第一次调用 p/invoke 方法时按需加载。因此,您只需要确保在第一次调用 DLL 中的函数之前调用 SetDllDirectory