MVC4 App "Unable to load DLL 'libmp3lame.32.dll'

asp.net-mvc, dll, naudio

Solution

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.

Problem

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

Original source