Reputation: 111
I am new in dotnet.I have a dotnet dll that loads a c
dll by using DllImport
. I want to place all the dlls in a folder which is diffrent from the location of application. I dont want to modify environmental variables. So i used setdlldirectory
API and load my c# assembly through Assembly.Loadfrom(..)
. I checked that SetdllDirectory
is working fine by verifying the value of GetDllDirectory(..)
. But it is neither loading C# dll nor c dll from that folder. I am able to load C#
dll by specyfing the path in Assembly.Loadfrom
. But not able to load c dll.
Thanks in advance!!
Upvotes: 8
Views: 25977
Reputation: 805
I'd suggest adding the directory path to PATH env variable in runtime, using the following code:
var dllDirectory = @"C:/some/path";
Environment.SetEnvironmentVariable("PATH", Environment.GetEnvironmentVariable("PATH") + ";" + dllDirectory);
That way, the change is only affecting the running process and is discarded when it exits.
Upvotes: 18
Reputation: 6846
Take a look at the documentation for LoadFrom and you'll find that it says: If a native image exists for assemblyFile, it is not used. The assembly cannot be loaded as domain neutral.
I believe you're going to need to add the DLL directory to the EXE's path.
Upvotes: 0