I am trying to use the NAudio.Lame library in an MVC4 application and am getting the error:
Unable to load DLL 'libmp3lame.32.dll': The specified module could not be found.
I added the library via NuGet. I was able to get the library to work fine with a Windows Forms application, so I believe the problem is specific to MVC4.
I tried the advice from the library author here: https://stackoverflow.com/a/20065606/910348
The problem turns out to be that the native DLLs (libmp3lame.32.dll
and libmp3lame.64.dll
) cannot be found because the current directory that the web server process is executing from is not the website's bin
folder (where the DLLs reside) and the search path does not include the bin
folder.
What you need is to add the bin
folder to the PATH
environment variable, which will enable the LoadLibrary
API call to locate the DLLs.
Here's a method you can call that will do this for you:
public static void CheckAddBinPath()
{
// find path to 'bin' folder
var binPath = Path.Combine(new string[] { AppDomain.CurrentDomain.BaseDirectory, "bin" });
// get current search path from environment
var path = Environment.GetEnvironmentVariable("PATH") ?? "";
// add 'bin' folder to search path if not already present
if (!path.Split(Path.PathSeparator).Contains(binPath, StringComparer.CurrentCultureIgnoreCase))
{
path = string.Join(Path.PathSeparator.ToString(), new string[] { path, binPath });
Environment.SetEnvironmentVariable("PATH", path);
}
}
Place that in your controller and call it right before you create the LameMP3FileWriter
instance. It might work if you put it in Global.asax.cs
and call it from Application_Start()
. Try it and let me know if it works there.
I've put a Wiki article about this on the project site here.
Add the following line to the web.config for your site. This will prevent IIS from copying files and executing your site from a temporary folder (native dlls do not get copied apparently). The downside is that you will have to restart the application pool every time you push changes to your bin folder because IIS will lock the files there.
<system.web>
<hostingEnvironment shadowCopyBinAssemblies="false" />
...
</system.web>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With